Merkwürdiges beim kopieren von Dateien

German support forum

Moderators: Hacker, Stefan2, white

Post Reply
MrBigOuzo
Junior Member
Junior Member
Posts: 4
Joined: 2006-10-05, 06:43 UTC

Merkwürdiges beim kopieren von Dateien

Post by *MrBigOuzo »

Hi TotalCMDer Team,

ich habe ein merkwürdiges Phanomen beim kopieren von Dateien, dazu aber erst mal die Umgebung. :roll:
Rolling Eyes

Ich schreibe ein Programm in Delphi mit dessen Hilfe ich ein Verzeichnis auf Änderung überwachen will. Ich triggere auf Filemodification und und schaue was passiert wenn ich mit TCM eine Datei in das Verzeichnis kopiere.

Jetzt kommen nacheinander 3 Events und zwar folgendermaßen:

Datei ohne Endung z.B. '1122334455'
1. Event : Datei '1122334455'
2. Event : Datei '1122334455 ' hier hängt ein Space am Dateinamen !!!!
3. Event : Datei '1122334455'

Datei mit Endung z.B. '1122334455.flv'
1. Event : Datei '1122334455.flv'
2. Event : Datei '1122334455.flv'#$1C hier hängt ein Character 1C hex am Dateinamen !!!!
3. Event : Datei '1122334455.flv'

woher kommt das ????

kopiere ich nur mit dem Explorer dann kommt 1 Event mit dem richtigen Dateinamen und nicht noch das 2. und 3. Event.


Gruß
MrBigOuzo :roll: :roll:
User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 50843
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) »

Hmm, könnte vom Kopieren von erweiterten Datenstreams kommen. Haben die kopierten Dateien solche Streams? Diese gibt es z.B., wenn man via Alt+Enter einen Kommentar anlegt, oder die Dateien mit dem Internet Explorer herunter geladen hat.
Author of Total Commander
https://www.ghisler.com
MrBigOuzo
Junior Member
Junior Member
Posts: 4
Joined: 2006-10-05, 06:43 UTC

Post by *MrBigOuzo »

Hi TotalCMDer Team,

hmmm, habe jetzt auch mal versucht die totalcmd.exe in das Verzeichnis zu kopieren, auch da hängt er mir das $1C an auch ein eigenes Bild von mir macht genau das gleiche, ist irgendwie schon komisch

Warum passiert das mit dem Explorer nicht ? da wird, wenn ich auf Filemodifikation triggere nur 1 Event ausgelöst und keine 3.


Gruß
MrBigOuzo
User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 50843
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) »

Bei welcher Funktion tritt das denn auf?
Ich benutze selbst ReadDirectoryChangesW, da tritt kein solcher Fehler auf...
Author of Total Commander
https://www.ghisler.com
MrBigOuzo
Junior Member
Junior Member
Posts: 4
Joined: 2006-10-05, 06:43 UTC

Post by *MrBigOuzo »

Hallo,

sorry für die Verspätung, in der Komponente wird auch ReadDirectoryChangesW benutzt.

procedure TWaitThread.Execute;
var
numBytes: DWORD;
CompletionKey: DWORD;
begin
while not Terminated do
begin
GetQueuedCompletionStatus( FParent.FCompletionPort, numBytes, CompletionKey, FParent.FPOverlapped, INFINITE);
if CompletionKey <> 0 then
begin
Synchronize(HandleEvent);
with FParent do
begin
FBytesWritten := 0;
ZeroMemory(@FNotificationBuffer, SizeOf(FNotificationBuffer));
ReadDirectoryChangesW(FDirectoryHandle, @FNotificationBuffer, SizeOf(FNotificationBuffer), FParent.WatchSubtree , FNotifyFilter, @FBytesWritten, @FOverlapped, nil);
end;
end
else
Terminate;
end;
end;


sollte ich nochmals eine andere versuchen ?
User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 50843
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) »

Doch, das ist dieselbe Funktion. Aber Achtung: Die zurückgelieferten Strings sind NICHT 0-terminiert! Die Länge der Strings wird stattdessen über die Variable FileNameLength aus der Struktur FILE_NOTIFY_INFORMATION angegeben! Die Länge wird dabei in Bytes, nicht in Zeichen angegeben.

Ich kopiere den Namen so heraus:

var wname:array[0..MAX_PATH-1] of widechar;
l:integer;

l:=min(pnfi.FileNameLength,sizeof(wname)-2);
move(pnfi.FileName[0],wname[0],l);
wname[l div 2]:=#0;
Author of Total Commander
https://www.ghisler.com
MrBigOuzo
Junior Member
Junior Member
Posts: 4
Joined: 2006-10-05, 06:43 UTC

Post by *MrBigOuzo »

Hi,

ok, das klappt jetzt richtig, danke

das kommt davon wenn man nicht alles selbst macht
Post Reply