![]() |
CopyFile gibt Datei nicht frei?
:shock:
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:
Delphi-Quellcode:
Falls es nicht mein Fehler ist, und ich den übersehe: Womit ersetze ich CopyFile, um es auf jeden Fall "blocking" zu haben?//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; |
Re: CopyFile gibt Datei nicht frei?
Moin Lukas,
hast Du es schon einmal mit SHFileOperation versucht? |
Re: CopyFile gibt Datei nicht frei?
ich werd mir das ansehen.
EDIT: Scheint mir aber auch arg asynchron zu sein... EDIT: ok... :gruebel:
Delphi-Quellcode:
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...//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; |
Re: CopyFile gibt Datei nicht frei?
Ich bin offenbar einfach zu schnell... Habe mal ein "Sleep(20)" vors Laden geschoben, damit funktionierts in den meisten Fällen.
|
Re: CopyFile gibt Datei nicht frei?
Sodele. So funktionierts immer:
Delphi-Quellcode:
Dieses Filehandle kann man dann z.B. einem Filestream übergeben (TFileStream.Create(FHandle);).
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; |
Re: CopyFile gibt Datei nicht frei?
Läuft ein Virenscanner mit? Der braucht u.U. auch ein paar ms.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz