CreateFile_()

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

CreateFile_()

Beitrag von MVXA »

Tach.
Ich hab ein kleines Problem. Ich habe bis jetzt noch nicht so viel mit APIs gearbeitet. Vor allem nicht mit der CreateFile_() API. Ich benutze die API_FileHandle Include von jaPBe und mein Problem ist nu, dass ich eine Datei so öffnen möchte, wie es PB unter OpenFile() macht. OpenFile() möchte ich deshalb nicht direkt benutzen, da es ein paar konflikte mit der RFile Lib von TS-Soft gibt. Kann mir da jemand helfen ?
Bild
traumatic
Beiträge: 478
Registriert: 27.11.2004 15:42

Re: CreateFile_()

Beitrag von traumatic »

Da Du nicht schreibst, was genau Du vorhast, hier mal ein einfaches (generelles) Beispiel:

Code: Alles auswählen

; Datei erstellen (Lese- und Schreibrecht)
hFile = CreateFile_("testing.txt", #GENERIC_READ | #GENERIC_WRITE, #FILE_SHARE_READ, #NULL, #OPEN_ALWAYS, #FILE_ATTRIBUTE_NORMAL, #NULL)

If hFile <> #INVALID_HANDLE_VALUE

   ; String in die Datei schreiben
   myString.s = "Testing, testing, 1,2, 1,2"
   
   WriteFile_(hFile, myString, Len(myString), @actBytes.l, #NULL)

   ; wieder an den Anfang zurückgehen...
   SetFilePointer_(hFile, 0, 0, #FILE_BEGIN)

   ; ... den geschriebenen String wieder auslesen...
   myString2.s = Space(Len(myString))
   
   ReadFile_(hFile, @myString2, Len(myString), @actBytes, #NULL)

   ; ... und anzeigen
   Debug myString2

   ; Datei schließen.
   CloseHandle_(hFile)
EndIf

Für eine Erklärung der einzelnen Parameter einfach mal bei MSDN schauen...
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

#GENERIC_READ | #GENERIC_WRITE <- das habe ich gesucht :D
Bild
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Sry, für doppel post aber hab ein neues Problem :(. Ich hab nun ne Funktion, mit der ich eine Funktion ähnlich wie OpenFile() öffnen kann. Hier mal die Funktion:

Code: Alles auswählen

Procedure API_FileAppend(*File.API_FileHandle, file$) 
    *File\FHandle = CreateFile_(file$, #GENERIC_WRITE, 0, 0, #OPEN_ALWAYS, #FILE_ATTRIBUTE_NORMAL, 0)
    
    If *File\FHandle = #INVALID_HANDLE_VALUE
        ProcedureReturn #False
    Else
        ProcedureReturn #True
    EndIf
EndProcedure
Doofe nur ist, dass wenn ich was in die Datei schreibe, der alte Inhalt überschrieben wird. Wie kann ich ein FileSeek mit APIs bewerkstelligen?
Bild
traumatic
Beiträge: 478
Registriert: 27.11.2004 15:42

Beitrag von traumatic »

MVXA hat geschrieben:Wie kann ich ein FileSeek mit APIs bewerkstelligen?
Siehe mein Beispiel: "SetFilePointer()"

Code: Alles auswählen

#FILE_BEGIN
The starting point is zero or the beginning of the file.
If #FILE_BEGIN is specified, DistanceToMove is interpreted
as an unsigned location for the new file pointer.

#FILE_CURRENT
The current value of the file pointer is the starting point.

#FILE_END
The current end-of-file position is the starting point.
Zuletzt geändert von traumatic am 20.02.2005 17:07, insgesamt 1-mal geändert.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

traumatic hat geschrieben:Siehe mein Beispiel: "SetFilePointer()"
Ehm, Hopala :oops:. Habe ich doch galt übersehen :oops:.

edit.
Frage hab ich noch.
Typ bei MSDN hat geschrieben:DWORD SetFilePointer(
HANDLE hFile,
LONG lDistanceToMove,
PLONG lpDistanceToMoveHigh,
DWORD dwMoveMethod
);
was ist lDistanceToMove und lpDistanceToMoveHigh? Wenn ich des richtig vesrtehe sind das gleiche Werte aber mit verschiedenen Variable Typen o_O.
Bild
traumatic
Beiträge: 478
Registriert: 27.11.2004 15:42

Beitrag von traumatic »

MVXA hat geschrieben: was ist lDistanceToMove und lpDistanceToMoveHigh?
Wo guckst Du da nach? ;)

Sollte selbst erklärend sein:

Code: Alles auswählen

lDistanceToMove
Specifies the number of bytes to move the file pointer.
A positive value moves the pointer forward in the file
and a negative value moves it backward.

lpDistanceToMoveHigh
Points to the high-order word of the 64-bit distance to
move.
If the value of this parameter is NULL, SetFilePointer
can operate only on files whose maximum size is 2^32 - 2.
If this parameter is specified, the maximum file size is
2^64 - 2. This parameter also receives the high-order
word of the new value of the file pointer.
Nicht? :)
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Beitrag von GPI »

Das API-SEEK hab ich in der neusten Version von jaPBe eingefügt.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
traumatic
Beiträge: 478
Registriert: 27.11.2004 15:42

Re: CreateFile_()

Beitrag von traumatic »

Was mir gerade noch einfällt:
MVXA hat geschrieben:da es ein paar konflikte mit der RFile Lib von TS-Soft gibt.
Vielleicht solltest Du TS-Soft mal dazu überreden, #PB_Any zu benutzen.
Ich nehme an, dass dies die Ursache Deiner Probleme ist (?)
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

@traumatic
Ist es nicht. Das Problem liegt irgendwo ganz weit unten bei PB. Wenn ich die RFile in kombination mit FileCreate benutze, kann ich in meine geöffnete Datei nichts schreiben. TS-Soft wollte die Lib schon auf API umstellen aber wie es aussieht hat er ncoh wichtigeres zu tun :(.

@GPI
Ehm, wäre schön wenn du neben API_FileCreate und API_FileRead auch API_FileAppend einbauen könnetst. Das fehlt mir bei den Includes... :|.
Bild
Antworten