.net - Får File.Copy () fra et netværk til en anden del på samme maskine kopiere filen over netværket?

Indlæg af Hanne Mølgaard Plasc

Problem



Hvis min .NET-klient bruger System.IO.File.Copy til at kopiere en fil fra \ server1 \ share1 \ file1.txt til \ sever1 \ share2 \ file2 .txt , bliver filens data læst ned til klienten og derefter skrevet tilbage til serveren? Hvis ja, kan en .NET-klient kopiere en fil på en server til et andet sted på den samme server uden runde tripping filen? Gør det en forskel, hvis destinationsandelen er den samme som kildedelen?

Bedste reference


Ja det gør. Jeg kan sige dette fra personlig erfaring med at kopiere 10 GB Zip-filer mellem maskiner. Klientmaskinen var på en anden kyst i Amerika end de to andre maskiner. Mellem de to maskiner direkte fra en af ​​dem tog en rimelig tid. Forsøg på at starte kopien fra maskinen på den anden kyst tog ~ 10 timer :(

Andre referencer 1


Dette er et gammelt spørgsmål, men jeg tror ikke, der er et korrekt svar her.


Der er faktisk 2 spørgsmål (3 spørgsmål, men 3 er overflødig).


Det første spørgsmål er, om en .Net-proces, der kører på en (3.) klientmaskin, kopierer en fil fra en netværksdel til en anden netværksandel, gør det en forskel, hvis kilde- og målaktierne er på samme computer (forskellig fra klienten ) vs 2 forskellige computere? Svaret er klart ikke. Der er ingen mekanisme, ingen hemmelig tunnel mellem netværksaktier. Data skal rejse til kunden og derefter til den anden aktie. Det gør ikke nogen forskel, hvis operationen er en kopi eller et skridt, og det gør faktisk ikke forskel, hvis aktierne er på samme computer som klienten (og du har virkelig adgang til mapper som netværks shares med en UNC-sti og ikke som lokale mapper).


Det andet spørgsmål er, hvordan kan denne rundtur undgås? Her er nogle forslag:



  1. Hvis kilden og målet er på samme del, kræver det ikke en rundrejse at flytte en fil, da OS kun opdaterer referencerne i filsystemet.

  2. En proces, der kører på maskinen med enten kilden eller måldelen, kan udføre kopien uden rundvisning til kunden. Denne proces kan være en fjernkopi osv., Hvis en af ​​værterne kører Linux. På en Windows-vært kan du installere en WCF-tjeneste, der kopierer filer, når en forespørgsel kommer fra en klient.


Andre referencer 2


Filindholdet skal gå gennem maskinen, der udfører kopiering. Den eneste vej omkring dette er at køre programmer på målmaskine (r), der udfører overførslen uden klientmaskinen i midten. f.eks. FXP, der bruger FTP til at overføre server til server.

Åbning af denne vej kan dog også åbne et sikkerhedsmulhul, og jeg formoder, at mange administratorer ville være tilbageholdende med at tillade dette. [1]

Andre referencer 3


Det er et glimrende spørgsmål - jeg kan ikke synes at finde nogen endelig svar, så måske det bedste ville være at afbrænde Wireshark til en test. [2]

Andre referencer 4


Hvis det er muligt at tage et skridt i stedet for en kopi, skal det ske med det samme. Ellers skal du sætte en tjeneste på målmaskinen, så du kan kalde den eksternt.