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 FileOpen & Co. (https://www.delphipraxis.net/13997-fileopen-co.html)

moritz 30. Dez 2003 16:09


FileOpen & Co.
 
Hallo

Code:
procedure DestroyFile(fFile: String);
var vFile:     THandle;
    vNothing:  Byte;
    vPosition: Cardinal;
    vFileSize: Cardinal;
    vEmpty:    LongWord;
begin
  vPosition:=0;
  vFileSize:=GetFileSize(fFile);
  if vFileSize = 0 then
    exit;
  vFile := Integer(CreateFile(PChar(fFile), GENERIC_WRITE, FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0));  
  try
    while vPosition < vFileSize do
    begin
      vNothing := Random( 256 );
      WriteFile(vFile, vNothing, SizeOf(vNothing), vEmpty, nil);
      Inc( vPosition );
      SetFilePointer(vFile, 0, nil, vPosition);
    end;
  finally
    CloseHandle(vFile);
  end;
end;
Dieser Code soll eigentlich jedes Byte einer Datei durch ein Zufallsbyte ersetzen, tut er arber nicht. Woren könnte das liegen?

Onz

Chewie 30. Dez 2003 16:54

Re: FileOpen & Co.
 
Hast du zuvor Randomize aufgerufen?

RobertS 30. Dez 2003 17:47

Re: FileOpen & Co.
 
also vielleicht liegt es ja daran das caridal <> string ist?

Also der Code wie von dir oben kann nicht funzen...

Chewie 30. Dez 2003 18:21

Re: FileOpen & Co.
 
Ach so, jetzt seh ich was, du rufst SetFilePointer so auf:

Delphi-Quellcode:
SetFilePointer(vFile, 0, nil, vPosition);
Schau dir die Beschreibung dieser Funktion noch mal an und du wirst sehen, dass dein vPosition an die zweite Stelle gehört und an die letzte FILE_BEGIN. Oder du benutzt FILE_CURRENT und springst um 1 weiter.

moritz 31. Dez 2003 09:56

Re: FileOpen & Co.
 
Morgen

Zitat:

Zitat von Chewie
Hast du zuvor Randomize aufgerufen?

Japp.

Zitat:

Zitat von RobertS
also vielleicht liegt es ja daran das caridal <> string ist?

Also der Code wie von dir oben kann nicht funzen...

Tut mir ja fürchterlich leid, aber er funktioniert :)

Zitat:

Zitat von Chewie
Ach so, jetzt seh ich was, du rufst SetFilePointer so auf:

Delphi-Quellcode:
SetFilePointer(vFile, 0, nil, vPosition);
Schau dir die Beschreibung dieser Funktion noch mal an und du wirst sehen, dass dein vPosition an die zweite Stelle gehört und an die letzte FILE_BEGIN. Oder du benutzt FILE_CURRENT und springst um 1 weiter.

Merci! Es geht.

Gruß


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