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/)
-   -   Delphi writefile-Problem (https://www.delphipraxis.net/192899-writefile-problem.html)

alpenrose 31. Mai 2017 11:14

writefile-Problem
 
var bufferp:array[0..511] of byte;
.
.
.
c:='\\.\PhysicalDrive1'+chr(0);
a:=createfile(pchar(c),GENERIC_READ+GENERIC_WRITE, FILE_SHARE_READ+FILE_SHARE_WRITE,nil,OPEN_EXISTING ,0,0);
for i := 0 to 511 do bufferp:=0;
b:=setfilepointer(a,bootsectorpos,nil,FILE_BEGIN); //Bootsektor einer FAT32-Partition auf einer externen USB-HDD
bp:=512;
x:=writefile(a,bufferp[0],bp,b,nil); //Bootsektor schreiben - das funktioniert

b:=setfilepointer(a,bootsectorpos+6*512,nil,FILE_B EGIN); //Backup-Bootsektor (nur 6 Sektoren weiter) von obiger Partition
bp:=512;
x:=writefile(a,bufferp[0],bp,b,nil); //Backup-Bootsektor schreiben - das funktioniert nicht (access denied)
closehandle(a);
.
.
.

Das obige Codefragment soll den Bootsektor und den Backup-Bootsektor einer FAT32-Partition auf einer externen USB-HDD löschen.
Das Löschen des Bootsektors funktioniert, das Löschen des Backup-Bootsektors hingegen nicht: Zugriff verweigert!
Was könnte der Grund dafür sein und wie kann man das Problem lösen?

SneakyBagels 31. Mai 2017 12:01

AW: writefile-Problem
 
- https://www.winboard.org/windows-7/2...ammierung.html
- https://www.windows-7-forum.net/thre...mierung.54326/
- https://answers.microsoft.com/de-de/...8-2856d23b00f1

:roll: :roll:

p80286 31. Mai 2017 23:35

AW: writefile-Problem
 
Was liefert den SetFilePointer zurück?
Und was ist der Inhalt von bootsectorpos?

Delphi-Quellcode:
b:=setfilepointer(a,bootsectorpos+6*512,nil,FILE_B EGIN); //Backup-Bootsektor (nur 6 Sektoren weiter) von obiger Partition
Und hast Du einmal versucht, die Größe der Datei zu bestimmen?
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

Gruß
K-H

P.S.
"a" und "b" sind als Variablennamen nicht so der Renner

EmWieMichael 1. Jun 2017 10:53

AW: writefile-Problem
 
Code:
for i := 0 to 511 do bufferp:=0;
Das würde mein Compiler verweigern.

alpenrose 1. Jun 2017 11:20

AW: writefile-Problem
 
Hallo p80286!

SetFilePointer liefert den Wert 1694410752 zurück (wies sein soll).
Der Inhalt von bootsectorpos ist: 1694407680
Die Größe welcher Datei meinst Du, da ist ja keine im Spiel?

Hallo EmWieMichael!

for i := 0 to 511 do bufferp:=0; ist natürlich falsch!!!

War ein Abschreibfehler (ist in meinem Quelltext richtig), muss richtig heißen:

for i := 0 to 511 do bufferp[i]:=0;


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