AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Mit SetFilePointer zum Ende - n springen, wie?
Thema durchsuchen
Ansicht
Themen-Optionen

Mit SetFilePointer zum Ende - n springen, wie?

Ein Thema von sk0r · begonnen am 8. Jun 2008 · letzter Beitrag vom 8. Jun 2008
Antwort Antwort
sk0r

Registriert seit: 1. Mai 2007
181 Beiträge
 
Delphi 7 Enterprise
 
#1

Mit SetFilePointer zum Ende - n springen, wie?

  Alt 8. Jun 2008, 15:16
Hi,

joa, das Topic sagt eigentlich schon alles...
Wie mache ich das? n kann eine beliebige Nummer sein.

MfG: sk0r
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

Re: Mit SetFilePointer zum Ende - n springen, wie?

  Alt 8. Jun 2008, 15:17
GetFileSize gibt dir die Gesamtgröße der Datei. N musst du dann nur noch abziehen.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Mit SetFilePointer zum Ende - n springen, wie?

  Alt 8. Jun 2008, 15:21
Es gibt nicht umsonst den Wert FILE_END für dwMoveMethod.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

Re: Mit SetFilePointer zum Ende - n springen, wie?

  Alt 8. Jun 2008, 15:29
Ja klar, aber dann springt er doch komplett ans Dateiende. Oder wird der Offset dann von hinten aus zurückgesprungen?
  Mit Zitat antworten Zitat
sk0r

Registriert seit: 1. Mai 2007
181 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Mit SetFilePointer zum Ende - n springen, wie?

  Alt 8. Jun 2008, 15:43
Ich kann doch nicht einfach FILE_END - n machen.^^
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Mit SetFilePointer zum Ende - n springen, wie?

  Alt 8. Jun 2008, 15:52
Ist es denn eigentlich so schwer die Hilfe zu lesen? MSDN-Library durchsuchenSetFilePointer Allerdings wäre es wohl zu empfehlen MSDN-Library durchsuchenSetFilePointerEx zu nutzen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
sk0r

Registriert seit: 1. Mai 2007
181 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Mit SetFilePointer zum Ende - n springen, wie?

  Alt 8. Jun 2008, 16:08
Sorry, aber ich kann kein Englisch.

Delphi-Quellcode:
type TByteArr = array[0..1] of Byte;

function GetValue:TByteArr;
var
  hOpn: Cardinal;
  OfStruct: TOFStruct;
  dwBytesRead: Cardinal;
  mBuf: TByteArr;
begin
  hOpn := OpenFile(PChar(GetMySelf()), OfStruct, 0);
  if hOpn <> 0 then
  begin
    SetFilePointerEx(hOpn, -2, nil, FILE_END);
    ReadFile(hOpn, mBuf, 2, dwBytesRead, nil);
    showmessage(inttostr(mBuf[0]) + inttostr(mBuf[1]));
    result := mBuf;
    CloseHandle(hOpn);
  end;
end;
So versuche ich nun die Zahl auszulesen. Ich habe am Ende der Datei eine 17 platziert,
aber es kommt immer eine andere Zahl (690) heraus.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#8

Re: Mit SetFilePointer zum Ende - n springen, wie?

  Alt 8. Jun 2008, 17:01
erstens ist mein Englich auch nicht sonderlich gut, aber dennoch kann/versuch ich es zu lesen ... notfalls gibt's ja noch Wörterbücher und Übersetzer


Zitat:
Ich habe am Ende der Datei eine 17 platziert,
und wie hast du das gemacht?


zu OpenFile:
Zitat:
Only use this function with 16-bit versions of Windows. For newer applications, use the CreateFile function.
zu Deutsch: verwende MSDN-Library durchsuchenCreateFile, da OpenFile eine veraltete Funktion ist (Windows 3.1 und Co.)



PS: dieses geht bei mir:
Delphi-Quellcode:
type TByteArr = array[0..1] of Byte;

function GetValue: TByteArr;
var
  hOpn: THandle;
  dwBytesRead: Cardinal;
  mBuf: TByteArr;
begin
  // 'ne Testdatei mit "17" am Ende erzeugen
  hOpn := CreateFile('test.dat', GENERIC_WRITE, 0, nil, CREATE_ALWAYS, 0, 0);
  if hOpn <> INVALID_HANDLE_VALUE then
  begin
    mBuf[0] := 8;
    mBuf[1] := 9;
    WriteFile(hOpn, mBuf, 2, dwBytesRead, nil);
    mBuf[0] := 1;
    mBuf[1] := 7;
    WriteFile(hOpn, mBuf, 2, dwBytesRead, nil);
    CloseHandle(hOpn);
  end;
  mBuf[0] := 0; // nur damit nicht noch die 17 vom Speichern drinsteht,
  mBuf[1] := 0; // da beim Lesen dwBytesRead nicht geprüft wird.


  // Auslesen
  hOpn := CreateFile('test.dat', GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
  if hOpn <> INVALID_HANDLE_VALUE then
  begin
    SetFilePointer(hOpn, -2, nil, FILE_END);
    ReadFile(hOpn, mBuf, 2, dwBytesRead, nil);
    showmessage(inttostr(mBuf[0]) + inttostr(mBuf[1]));
    result := mBuf;
    CloseHandle(hOpn);
  end;
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
sk0r

Registriert seit: 1. Mai 2007
181 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Mit SetFilePointer zum Ende - n springen, wie?

  Alt 8. Jun 2008, 18:36
Gut, mit CreateFile klappt es. Danke.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:15 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