Autor Beitrag
Gahero
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 193

Win Vista HP 64bit
Delphi 2007 Pro
BeitragVerfasst: Mi 02.07.08 10:46 
Hallo,

ich habe mich eben mit der Copyfile Methode rumgeschlagen und mir ist etwas aufgefallen:

ausblenden Delphi-Quelltext
1:
Copyfile(PChar('C:\text.txt'), PChar('D:\text2.txt'), false);					


Diese Zeile wir ohne murren compiliert, klappt aber nachher nicht, er tut einfach nichts, wenn sie aufgerufen wird.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
pfad_von := 'C:\text.txt';
pfad_nach := 'D:\text2.txt';

Copyfile(PChar(pfad_von), PChar(pfad_nach), false);


Diese Zeilen werden auch compiliert und erfolgreich ausgeführt, das heißt, die Datei wird kopiert.

Das heißt, wenn man die Pfade direkt übergibt klappts nicht, wenn man sie als Variable übergibt klappts. Warum???

Das sind jetzt nur Beispiel Pfade in meinem Programm hab eich andere, die wären für hier aber zu lang, wenn ich sie jetzt alle kopiere.
Ich nutze Delphi 2007 unter Vista 64 bit.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 02.07.08 10:55 
Im ersten Fall stehen die Strings mit einem einfachen Nullbyte am Ende terminiert in der EXE, während die bei der zweiten Variante durch das Alignment mit mindestens 2 Bytes gepadded werden zu scheinen. CopyFile will ber immer mindestens 2 Nullbytes am Ende (oder war das die Shell-Variante)???

Generell ist es zudem eine schlechte Idee, einen StringLiteral auf PChar zu casten: Das macht Delphi selber wenn nötig.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 02.07.08 12:11 
user profile iconGahero hat folgendes geschrieben:
Hallo,

ich habe mich eben mit der Copyfile Methode rumgeschlagen und mir ist etwas aufgefallen:

ausblenden Delphi-Quelltext
1:
Copyfile(PChar('C:\text.txt'), PChar('D:\text2.txt'), false);					


Diese Zeile wir ohne murren compiliert, klappt aber nachher nicht, er tut einfach nichts, wenn sie aufgerufen wird.

Bitte erst Hausaufgaben machen:
- Rückgabewert überprüfen
- und gegebenenfalls GetLastError aufrufen
Wenn du das gemacht hast, können wir weiter reden.
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Mi 02.07.08 13:04 
HI,

wenn du die Pfadangabe direkt in die Funktion schreibst musst du das PChar weg lassen!

ausblenden Delphi-Quelltext
1:
CopyFile('C:\Text.txt','D:\Text2.txt',false)					


nur wenn du die Pfade in ner Varaible speicherst, dann muss du PChar benutzen,
wie du ja shcon gemerkt hast gehts da ja ^^

MfG Bergmann.