Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   JPG wird mit CopyFile fehlerhaft kopiert (https://www.delphipraxis.net/190420-jpg-wird-mit-copyfile-fehlerhaft-kopiert.html)

ThomasWB 2. Okt 2016 12:05

JPG wird mit CopyFile fehlerhaft kopiert
 
Hallo,
ich möchte eine JPG-Datei kopieren:
Code:
CopyFile(PChar(strSelectFile),PChar(strFilenameJpg))
Der Befehl liefert keinen Fehler zurück , die Zieldatei strFilenameJpg wird erstellt. Wenn ich die Datei aber öffnen möchte, erhalte ich den Fehler "Das Format der Datei '...' konnte nicht bestimmt werden". Ich habe die beiden Dateien auch schon mit einem HEX-Editor verglichen. Sie sind total unterschiedlich. Ich habe es auch schon mit den unterschiedlichsten Bildern probiert, das Ergebnis ist immer das Geliche: die Zeildatei wird nicht als Grafikdatei erkannt.

Hat irgendjemand auch schon mal das Problem gehabt? Habt ihr eine Idee, waran es liegen kann?

zeras 2. Okt 2016 12:29

AW: JPG wird mit CopyFile fehlerhaft kopiert
 
Wie sieht es mit der Dateilänge aus?
Ist diese gleich?
Hast du einen Virus, der sich an die Datei mit dranhängt?
Wie sehen die ersten Bytes der jeweiligen Datei aus? Vielleicht kannst du diese mal anhängen.

himitsu 2. Okt 2016 13:00

AW: JPG wird mit CopyFile fehlerhaft kopiert
 
Das ist aber nicht das "richtige" MSDN-Library durchsuchenCopyFile aus der Windows.pas / WinApi.Windows.pas, denn bei dir fehlt der 3. Parameter.
Also wie sieht "dein" CopyFile aus?

Was heißt "Der Befehl liefert keinen Fehler zurück"?
Die (originale) WinAPI erzeugt keine Exceptions und gibt nur ein Result+GetLastError zurück (
Delphi-Quellcode:
if not CopyFile(...) then RaiseLastOSError;
).

Und von wo nach wo kopierst du?
* intern auf einer Festplatte, innerhalb einer Partition
* auf einen USB-Datenträger
* Netzlaufwerk
* ...

Was passiert, wenn du diese Datei mit dem Explorer kopierst?

ThomasWB 2. Okt 2016 15:14

AW: JPG wird mit CopyFile fehlerhaft kopiert
 
Die komplette Code-Zeile lautet:
Code:
if CopyFile(PChar(strSelectFile),PChar(strFilenameJpg)) then
Kopiert wird auf ein und derselben Festplatte und er gleichen Partition. Die Originaldatei hat eine Größe von 22kB, die "erzeugte" Datei ist 230kNB groß. Beim Kopieren mit dem Explorer funktioniert es einwandfrei.

Der Befehl
Code:
if not CopyFile(PChar(strSelectFile),PChar(strFilenameJpg)) then RaiseLastOSError;
geht fehlerfrei durch - aber die Zieldatei ist korrupt.

Anfang der Originaldatei:
00000000h: FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 00 00 ; ÿØÿà..JFIF......
00000010h: 00 00 00 00 FF DB 00 43 00 10 0B 0C 0E 0C 0A 10 ; ....ÿÛ.C........
00000020h: 0E 0D 0E 12 11 10 13 18 28 1A 18 16 16 18 31 23 ; ........(.....1#
00000030h: 25 1D 28 3A 33 3D 3C 39 33 38 37 40 48 5C 4E 40 ; %.(:3=<9387@H\N@
00000040h: 44 57 45 37 38 50 6D 51 57 5F 62 67 68 67 3E 4D ; DWE78PmQW_bghg>M
00000050h: 71 79 70 64 78 5C 65 67 63 FF DB 00 43 01 11 12 ; qypdx\egcÿÛ.C...
00000060h: 12 18 15 18 2F 1A 1A 2F 63 42 38 42 63 63 63 63 ; ..../../cB8Bcccc
00000070h: 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 ; cccccccccccccccc
00000080h: 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 ; cccccccccccccccc
00000090h: 63 63 63 63 63 63 63 63 63 63 63 63 63 63 FF C0 ; ccccccccccccccÿÀ
000000a0h: 00 11 08 01 1A 01 CD 03 01 22 00 02 11 01 03 11 ; ......Í.."......
000000b0h: 01 FF C4 00 1B 00 01 00 02 03 01 01 00 00 00 00 ; .ÿÄ.............
000000c0h: 00 00 00 00 00 00 00 01 05 02 03 04 06 07 FF C4 ; ..............ÿÄ
000000d0h: 00 4B 10 00 01 04 01 03 03 01 06 05 01 03 08 07 ; .K..............
Anfang der kopierten Datei:
00000000h: D0 CF 11 E0 A1 B1 1A E1 00 00 00 00 00 00 00 00 ; ÐÏ.ࡱ.á........
00000010h: 00 00 00 00 00 00 00 00 3E 00 03 00 FE FF 09 00 ; ........>...þÿ..
00000020h: 06 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 ; ................
00000030h: CB 01 00 00 00 00 00 00 00 10 00 00 FE FF FF FF ; Ë...........þÿÿÿ
00000040h: 00 00 00 00 FE FF FF FF 00 00 00 00 C7 01 00 00 ; ....þÿÿÿ....Ç...
00000050h: C8 01 00 00 C9 01 00 00 CA 01 00 00 FF FF FF FF ; È...É...Ê...ÿÿÿÿ
00000060h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
00000070h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
00000080h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
00000090h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
000000a0h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
000000b0h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
000000c0h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
000000d0h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

haentschman 2. Okt 2016 15:48

AW: JPG wird mit CopyFile fehlerhaft kopiert
 
Hallo ThomasWB...:P

Sei so nett und hänge deine Delphi Version an dein Profil dran. Das macht manchmal Sinn... :zwinker:

Mikkey 2. Okt 2016 16:04

AW: JPG wird mit CopyFile fehlerhaft kopiert
 
Manchmal sieht man den Wald vor lauter Bäumen nicht.

Die Signatur der Kopie sieht nach einem Office(o.ä) Dokument aus.
Bist Du sicher, dass die Stringvariablen den von Dir vorgesehenen Inhalt haben?

dummzeuch 2. Okt 2016 17:14

AW: JPG wird mit CopyFile fehlerhaft kopiert
 
Zitat:

Zitat von ThomasWB (Beitrag 1349504)
Die komplette Code-Zeile lautet:
Code:
if CopyFile(PChar(strSelectFile),PChar(strFilenameJpg)) then

Wie himitsu schon schrieb: Das kann nicht Windows.CopyFile sein, weil der 3. Parameter fehlt.

Delphi-Quellcode:
function CopyFile(lpExistingFileName, lpNewFileName: LPCWSTR; bFailIfExists: BOOL): BOOL; stdcall;


Welches CopyFile wird da aufgerufen?

ThomasWB 2. Okt 2016 17:58

AW: JPG wird mit CopyFile fehlerhaft kopiert
 
@dummzeuch: Es wird das CopyFile von JvWinDialogs verwendet.

@Mikkey: Mit dem "den Wald vor lauter Bäumen nicht sehen" hattest du vollkommen recht. Ich hätte Stein und Bein geschworen, dass ich die Stringvariablen überprüft hatte. Wahrscheinlich war es dies auch zu Beginn. Dann habe ich den Dialog, mit dem ich strSelectFile auswähle, geändert und bei der Zuweisung zu der Variablen den Namen der alten Dialogkomponente verwendet. Dies habe ich nun korrigiert - und es funktioniert alles fehlerfrei.

Danke euch allen für eure Hilfe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 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