Einzelnen Beitrag anzeigen

bAlaRk

Registriert seit: 14. Feb 2013
2 Beiträge
 
#1

Zugriffsfehler bei Kopiervorgang

  Alt 14. Feb 2013, 10:45
Hallo Leute,

ich habe folgendes Problem. Mein Programm sieht zyklisch alle 2 Minuten in einem Verzeichnis nach ob neue Daten vorhanden sind und importiert sie gegebenenfalls in eine Dokumentenverwaltungssoftware. Das Verzeichnis ist das Zielverzeichnis des Scanners, der also per FTP upload pdfs da rein schiebt. Der worst case tritt ein wenn gerade gescannt wird, die 2 Minuten rum sind und die Software während dem Uploadvorgang losrennt, dann gibts nen crash:
"Beim Zugriff auf den Datenträger ist ein Fehleraufgetreten: Datei Pfad\xy.pdf kann nicht geöffnet werden. Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird. / Der Vorgang wurde erfolgreich beendet(0)."

Um den Fragen hast du schon mal im Forum gesucht oder gegoogelt gleich vorweg auszuweichen, ja hab ich!

Folgendes habe ich probiert:
Delphi-Quellcode:
function IsFileInUse(const fName: TFileName): Boolean;
var
  HFileRes: HFILE;
begin
  Result := False;
  HFileRes := CreateFile(PChar(fName),
                         GENERIC_READ or GENERIC_WRITE,
                         0,
                         nil,
                         OPEN_EXISTING,
                         FILE_ATTRIBUTE_NORMAL,
                         0);
  Result := (HFileRes = INVALID_HANDLE_VALUE);
  if not Result then
    CloseHandle(HFileRes);
end;
und hier aus dem Forum folgende Lösung:
Delphi-Quellcode:
function IsFileOpen(const FileName: string): Boolean;
var Stream: TFileStream;
begin
  Result := false;
  if not FileExists(FileName) then exit;
  try
    Stream := TFileStream.Create(FileName,fmOpenRead or fmShareExclusive);
  except
    Result := true;
    exit;
  end;
  Stream.Free;
end;
Leider wird mir nicht angezeigt, dass die Datei wie auch immer verwendet wird, mit anderen Worten die Rückgabe ist immer false, obwohl die Datei definitiv nicht vollständig angekommen ist.

Ich muss zu meiner Schande gestehen, dass ich eigentlich nur wenns wirklich nicht anders geht in Delphi programmiere und damit bei spezifischen Themen mehr ein copy/paste Delphi Coder bin. Vielleicht weiss einer von euch Rat,

Danke schon Mal, bAlaRk
  Mit Zitat antworten Zitat