Dateien auf Server hochladen - Fehler bei in anderer Verwendung stehenden Datei

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von sunshine.

    Dateien auf Server hochladen - Fehler bei in anderer Verwendung stehenden Datei

    Hallo,

    bei folgendem Vorhaben benötige ich Unterstützung:

    In einem bestimmten Eingangsordner werden tagsüber immer wieder einmal Dateien eingestellt. Diese werden dann zu einem gewissen Zeitpunkt alle gezippt und diese Zip-Datei dann auf einen Server hochgeladen. Das klappt soweit auch ganz gut. Wenn aber nun nur eine Datei noch nicht fertig in den Eingangsordner übertragen wurde und der Job bereits startet, läuft das Ganze auf einen Fehler. "Datei wird anderweitig bereits verwendet" oder ähnlich.

    Wie kann man das umgehen? Gibt es z.B. eine Möglichkeit, den Übertragungsstatus einer Datei abzufragen um diese noch nicht fertig übertragene Datei auszuklammern, so dass diese beim nächsten Job aufgegriffen wird?

    Wäre für einen Tipp mega dankbar.
    Da wäre ein Try/Catch angebracht. Du kennst die Exception die vorkommen kann, nur diese fängst du ab. Wie du dann weiter machst musst du mal überlegen. Ich täte eine kleine Helferklasse anlegen, Dateiname, max. Anzahl versuche zu verarbeiten. Davon eine Queue, diese abarbeiten, bei Fehlschlag wieder in die Queue wenn das RetryLimit nicht erreicht wurde, sonst den User einbeziehen und fragen wie weiter gemacht werden soll. Datei ausparen und später versuchen, oder sonstwas.

    Da bei einer Queue das FIFO(FirstInFirstOut) verfahren verwendet wird, würde im Fehlerfall hinten reingepackt, weshalb dann erst die anderen Dateien versucht werden zu verarbeiten. Deshalb eine Queue und keine List oder Stack nehmen, weil so ein wenig Zeit vergeht während die anderen Dateien verarbeitet werden.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DTF“ ()

    sunshine schrieb:

    noch nicht fertig in den Eingangsordner übertragen wurde
    Dann sollte das Zippen und Kopieren von nur einem Programm durchgeführt werden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Vielen Dank für die raschen Antworten.

    Zippen und Kopieren von einem Programm aus geht leider nicht.

    An Try & Catch habe ich in der Tat nicht dran gedacht. Ist aber genau das, was ich brauche. Queque könnte später noch interessant werden.

    Nur bekomme ich es nun immer noch nicht ganz hin. Zunächst lasse ich die Dateien via zip.AddFile("C:\Beispielordner\" & IO.Path.GetFileName(items), "") auslesen sowie auch als Protokoll in eine txt schreiben und folgend dann darauf mit zip.save zippen. Beim Auslesen/Protokollieren der Dateinamen ist die noch anderweitig verwendete Datei dann zwar problemlos, aber beim folgenden zip.save.Prozess halt dann nicht mehr und läuft auf den erwähnten Fehler. Kann man das anders machen?

    sunshine schrieb:

    Kann man das anders machen?
    Wenn das hochladende Programm auf den Dateinamen reagiert, kannst Du ja das ZIP-Archiv unter einem anderen Namen erstellen und umbenennen, wenn es fertig ist.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!