Seite 1 von 2
CreateFile_()
Verfasst: 19.02.2005 14:20
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 ?
Re: CreateFile_()
Verfasst: 19.02.2005 16:33
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...
Verfasst: 19.02.2005 17:26
von MVXA
#GENERIC_READ | #GENERIC_WRITE <- das habe ich gesucht

Verfasst: 20.02.2005 16:59
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?
Verfasst: 20.02.2005 17:06
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.
Verfasst: 20.02.2005 17:07
von MVXA
traumatic hat geschrieben:Siehe mein Beispiel: "SetFilePointer()"
Ehm, Hopala

. Habe ich doch galt übersehen

.
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.
Verfasst: 20.02.2005 17:25
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?

Verfasst: 20.02.2005 17:39
von GPI
Das API-SEEK hab ich in der neusten Version von jaPBe eingefügt.
Re: CreateFile_()
Verfasst: 20.02.2005 17:43
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 (?)
Verfasst: 20.02.2005 18:18
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...

.