AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CopyFile gibt Datei nicht frei?

Ein Thema von DGL-luke · begonnen am 8. Dez 2006 · letzter Beitrag vom 10. Dez 2006
Antwort Antwort
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#1

CopyFile gibt Datei nicht frei?

  Alt 8. Dez 2006, 22:32


Ich fordere über das Windows-Message-System von meiner Serverapplikation eine Datei an. Die Serverapplikation fertigt eine Kopie dieser Datei mit CopyFile an und schickt mir den Pfad dieser Datei wiederum übers Messaging-System. Ich öffne diese Datei per TStringlist.LoadFromFile - und was müssen meine brechenden Augen sehen?
Zitat:
Erste Gelegenheit für Exception bei $7C81EB33. Exception-Klasse EFOpenError mit Meldung 'Datei D:\Eigene Dateien von Superuser\tut_nichts_zur_sache\published\log0.log. txt kann nicht geöffnet werden. Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird'. Prozess Core.exe (1676)
Sollte die Datei nicht wieder frei sein, wenn CopyFile zurückkehrt? Was man hier sieht, spricht fürs gegenteil:

Delphi-Quellcode:
 
//generate filenames
      old := BaseDir + IncludeTrailingPathDelimiter(LOGDIR) + Logs[LogIdent];
      new := BaseDir + IncludeTrailingPathDelimiter(PUBDIR) + Logs[LogIdent];

      //make public file
      CopyFile(PChar(old),PChar(new),false); //CopyFile wird ausgeführt

      //fill formal data
      LI.YourHandle := AppHandle;
      LI.LogIdentifier := LogIdent;

      //write formal data
      MS := TMemoryStream.Create;
      try
        MS.Write(LI,SizeOf(LI));
        MS.Write(new[1], length(new));

        //fill copydatastruct
        CpDt.dwData := Integer(ltReadAnswer);
        CpDt.cbData := MS.Size;
        CpDt.lpData := MS.Memory;

        TLogMessageThread.Create(WHandle,AppHandle,CpDt,ThreadLog); //Nachricht wird vershickt
      finally
        MS.Free;
      end;
Falls es nicht mein Fehler ist, und ich den übersehe: Womit ersetze ich CopyFile, um es auf jeden Fall "blocking" zu haben?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: CopyFile gibt Datei nicht frei?

  Alt 8. Dez 2006, 22:47
Moin Lukas,

hast Du es schon einmal mit SHFileOperation versucht?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#3

Re: CopyFile gibt Datei nicht frei?

  Alt 8. Dez 2006, 22:52
ich werd mir das ansehen.

EDIT: Scheint mir aber auch arg asynchron zu sein...

EDIT: ok...

Delphi-Quellcode:
 
      //generate filenames
      old := BaseDir + IncludeTrailingPathDelimiter(LOGDIR) + Logs[LogIdent];
      new := BaseDir + IncludeTrailingPathDelimiter(PUBDIR) + Logs[LogIdent];

      MS := TMemoryStream.Create;
      try
        MS.LoadFromFile(old);
        MS.SaveToFile(new);
      finally
        MS.Free;
      end;

      //fill formal data
      LI.YourHandle := AppHandle;
      LI.LogIdentifier := LogIdent;

      //write formal data
      MS := TMemoryStream.Create;
      try
        MS.Write(LI,SizeOf(LI));
        MS.Write(new[1], length(new));

        //fill copydatastruct
        CpDt.dwData := Integer(ltReadAnswer);
        CpDt.cbData := MS.Size;
        CpDt.lpData := MS.Memory;

        TLogMessageThread.Create(WHandle,AppHandle,CpDt,ThreadLog);
      finally
        MS.Free;
      end;
Ich dachte mir, mach ichs halt klassisch, nimmst einen Memorystream... aber bei dem ist es genau das selbe Symptom... wie geht denn das? Ich fasse die "public"-Datei nirgends sonst an...
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#4

Re: CopyFile gibt Datei nicht frei?

  Alt 9. Dez 2006, 13:43
Ich bin offenbar einfach zu schnell... Habe mal ein "Sleep(20)" vors Laden geschoben, damit funktionierts in den meisten Fällen.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#5

Re: CopyFile gibt Datei nicht frei?

  Alt 10. Dez 2006, 18:44
Sodele. So funktionierts immer:

Delphi-Quellcode:
attmpts := 0;
  for i := 1 to 10 do
  begin
  FHandle := CreateFile(@LogName[1],GENERIC_READ,FILE_SHARE_READ,nil,
                                OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

  if FHandle <> INVALID_HANDLE_VALUE then
  begin
    attmpts := i;
    Break
  end
  else
    Sleep(50);
  end;
Dieses Filehandle kann man dann z.B. einem Filestream übergeben (TFileStream.Create(FHandle).
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: CopyFile gibt Datei nicht frei?

  Alt 10. Dez 2006, 21:44
Läuft ein Virenscanner mit? Der braucht u.U. auch ein paar ms.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz