Laden...

FileInfo.CopyTo Quellfile teilweise gelockt

Erstellt von Programmierhans vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.428 Views
Programmierhans Themenstarter:in
4.221 Beiträge seit 2005
vor 12 Jahren
FileInfo.CopyTo Quellfile teilweise gelockt

Hallo Zusammen

Kurze Frage:

Eine Anwendung kopiert zyklisch Files mit dem Befehl FileInfo.CopyTo.

Das Ziel-File ist ein Temp-File...(erst das Temp-File wird dann temporär verändert und am Ende wieder gelöscht)....

Es können mehrere Instanzen des selben Programmes gleichzeitig laufen. Die Ziel-Files sind aber 100% unterschiedlich (jede Instanz verwendet ein eigenes Zielverzeichnis.)... der Fehler kann nur vom Quellfile stammen.

Bei einem einzigen Kunden auf einem einzigen Rechner tritt regelmässig der folgende Fehler auf:> Fehlermeldung:

The process cannot access the file because another process has locked a portion of the file.

Oder auch der hier:> Fehlermeldung:

The process cannot access the file '\main\Pfad\File.xxx' because it is being used by another process.

Kann es sein, dass FileInfo.CopyTo das Quellfile während des Kopiervorganges lockt ?... Falls nein, wer sonst könnte das File noch locken... Denkbar wäre da z.B:

  • Virenschutz-Software
  • Backup (kann ich fast sicher ausschliessen... da es regelmässig passiert (öfter als das Backup dieses File sichern würde)).

Any Ideas ?

Gruss
Programmierhans

Edit:

Shit mir fällt gerade ein, dass es mal eine ältere Version gab die direkt das File im Quellpfad gepatcht hatte... und die würde während dem Schreibvorgang das File locken.

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

1.346 Beiträge seit 2008
vor 12 Jahren

Das das Virenschutzprogramm oder Backup Programm etwas damit zu tun hat, glaube ich nicht. Was sein könnte ist, dass FileInfo.Copy wirklich die Datei lockt. Ich würde mir aber da nicht so viele Gedanken drüber machen, und das ganze einfach schnll selbst machen, und dann dem FileStream im Konstruktor FileShare.ReadWrite mitgeben, und gucken, ob edas das problem behebt

Programmierhans Themenstarter:in
4.221 Beiträge seit 2005
vor 12 Jahren

Danke pdelvo

Ich werde jetzt mal abwarten und morgen den Kunden fragen ob er allenfalls irgendwo noch eine alte Version verwendet (welche vermutlich das Quellfile ganz kurz locken würde)... Jedenfalls würde dies genau auf das Schadensbild passen.

Wie einfach wäre doch das Programmiererleben ohne Kunden 😃

Gruss
Programmierhans

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

N
135 Beiträge seit 2006
vor 12 Jahren

Du könntest natürlich auch den Fehler abfangen.
Wenn dann der Fehler auftritt dein Programm z.B. eine Sekunde warten lassen und den Zugriff erneut versuchen.

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo Neidhard,

... z.B. eine Sekunde ...

besser: ... eine zufällige Zeitspanne zwischen z.B. wenigen Millisekunden und einer Sekunde ...

Das nennt sich dann ALOHA-Prinzip, und findet auch im Ethernet-Protokoll Verwendung.

Allerdings muss man bei deinem Vorschlag dafür sorgen, dass alle Versionen, die den Fehler zeigen (also fast alle), auf den aktuellen Stand gebracht werden. Liegt die Ursache - wie Programmierhans vermutet - tatsächlich an einigen alten Versionen, die noch schreibende Zugriffe benutzten und damit den Fehler verursachen, dann ist es vermutlich leichter nur diese zu aktualisieren.

herbivore