Filestream im Netzwerk kaputt?

  • C#
  • .NET 5–6

    Filestream im Netzwerk kaputt?

    Moin zusammen,
    ich verstehe gerade nicht ganz was hier passiert. Darf man in .NET einen FileStream nicht auf einen Netzwerkpfad legen?
    Ich versuche automatisiert eine Datei von einem Server im Netzwerk auf meinen lokalen Rechner zu kopieren. Mit Statusanzeige. Dazu benutze ich folgendes kleines Skript:

    C#-Quellcode

    1. using (FileStream fsSrc = new FileStream(@"\\Networkserver\IMPORT\DB1.bak", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
    2. double srcLen = fsSrc.Length;
    3. long done = 0L;
    4. using (FileStream fsDst = new FileStream(@"C:\TmpShare\DB1copy.bak", FileMode.Create, FileAccess.Write, FileShare.Read)) {
    5. byte[] buffer = new byte[81920];
    6. while (fsSrc.Read(buffer, 0, buffer.Length) is int bytesRead && bytesRead != 0) {
    7. fsDst.Write(buffer, 0, bytesRead);
    8. done += bytesRead;
    9. PrintPercent(done / srcLen);
    10. }
    11. }
    12. }


    Eigentlich super simpel und hat im lokalen Netz bis jetzt immer funktioniert. Jetzt ist der Server umgezogen und nur noch über VPN zu erreichen. Seitdem ist die Datei nach dem Kopieren einfach kaputt. Die Datei ist ca. 800MB groß und der Fehler tritt immer an einer anderen Stelle auf. Z.B. an Position 697.075.492 sind einfach ein paar hundert Bytes unterschiedlich. Einfach so. Der Rest stimmt wieder:



    Wie kann das sein?


    Lösung: Ok, ich habe jetzt während des schreiben von diesem Post die Lösung gefunden, aber das kann eigentlich echt nicht sein und will das hier trotzdem noch posten. Es liegt an dem FileShare.ReadWrite vom FileStream fsSrc. Änder ich das auf FileShare.Read funktioniert das Kopieren. Die Sache ist aber, die Datei wird gar nicht verändert, obwohl FileShare.ReadWrite das ja erlauben würde. Die Checksumme der Datei bleibt immer gleich. Ist das ein Bug im Dateisystem? Ist irgendwem dieser Fehler bekannt? WTF Microsoft, WTF.