2009-02-17 21 views
12

Se il mio client .NET utilizza System.IO.File.Copy per copiare un file da \ server1 \ share1 \ file1.txt a \ sever1 \ azione2 \ file2.txt, fa i dati del file vengono lette giù al client e poi riscritto sul server? In caso affermativo, esiste un modo in cui un client .NET può copiare un file su un server in un'altra posizione sullo stesso server senza eseguire il round-trip del file? Fa la differenza se la quota di destinazione è la stessa della condivisione di origine?File.Copy() da una condivisione di rete a un'altra condivisione sulla stessa macchina copia il file sulla rete?

risposta

7

Sì, sì. Posso dire questo per esperienza personale con la copia di file Zip da 10 GB tra le macchine. La macchina "client" si trovava su una costa diversa dall'America rispetto alle altre due macchine. Tra le due macchine direttamente da uno di loro è stata presa una quantità ragionevole di tempo. Cercando di avviare la copia dalla macchina sull'altra costa sono state necessarie circa 10 ore :(

2

Questa è una domanda eccellente: non riesco a trovare una risposta definitiva, quindi forse la cosa migliore sarebbe attivare Wireshark per un test.

+0

Perché non votare la sua domanda allora? Forse lo hai ed è stato nuovamente votato di nuovo, ma sembra che molte persone dimentichino di votare per buone domande. – Ash

+0

Grazie per il +1 e grazie per il suggerimento sullo strumento.Aggiornerò la mia domanda con l'output dello strumento come prova della risposta "sì" accettata, non appena ne avrò l'occasione. – flipdoubt

4

Il contenuto del file deve passare attraverso la macchina che esegue l'operazione Copia. L'unico modo per aggirare questo è eseguire i programmi sul computer di destinazione) che esegue il trasferimento senza la macchina client nel mezzo, come ad esempio FXP che utilizza FTP per trasferire server su server
Tuttavia, l'apertura di questo percorso potrebbe anche aprire una scappatoia di sicurezza e sospetto che molti amministratori sarebbero riluttanti a consentire questo

0

Se è possibile eseguire una mossa anziché una copia, ciò dovrebbe avvenire immediatamente, altrimenti è necessario mettere un servizio sul computer di destinazione in modo da poterlo chiamare da remoto.

+0

Davvero? Puoi provarlo? – flipdoubt

+0

Non sono sicuro di cosa intendi per "dimostrare" qui. L'ho appena dimostrato a me stesso in Windows Vista. Provaci. Usa Explorer sulla macchina A per accedere a una condivisione sulla macchina B, e 'Taglia' una grande sottocartella e 'Incolla' da qualche altra parte sotto la stessa condivisione. Si muoverà all'istante. –

+0

Come spiegato da @cdonner, funzionerà solo se le due cartelle si trovano sulla stessa condivisione. Se ci sono due diverse condivisioni, lo spostamento verrà eseguito come copia + cancella includendo un round-trip al client. – Anlo

7

Questa è una vecchia domanda, ma non penso che ci sia una risposta corretta qui.

Ci sono in effetti 2 domande (3 domande, ma il 3 è ridondante).

La prima domanda è se un processo .Net in esecuzione su un (terzo) computer client copia un file da una condivisione di rete a un'altra condivisione di rete, fa la differenza se le condivisioni di origine e di destinazione si trovano sullo stesso computer (diverso dal client) rispetto a 2 computer diversi? La risposta è chiaramente no. Non esiste alcun meccanismo, nessun tunnel segreto tra le condivisioni di rete. I dati devono viaggiare verso il cliente e poi verso l'altra condivisione. Non fa differenza se l'operazione è una copia o uno spostamento e in realtà non fa alcuna differenza se le condivisioni si trovano sullo stesso computer del client (e si accede effettivamente alle cartelle come condivisioni di rete con un percorso UNC e non come cartelle locali).

La seconda domanda è: come si può evitare questo round-trip? Ecco alcuni suggerimenti:

  1. Se la sorgente e il target si trovano sulla stessa condivisione, lo spostamento di un file non richiede un round trip, in quanto il sistema operativo aggiorna solo i riferimenti nel file system.
  2. Un processo in esecuzione sulla macchina con la sorgente o la condivisione di destinazione può eseguire la copia senza un ritorno al cliente. Questo processo può essere una copia remota ecc. Se uno degli host esegue Linux. Su un host Windows, è possibile installare un servizio WCF che copia i file quando arriva una richiesta da un client.
Problemi correlati