Klingt nach Locking... kannst Du mal etwas genauer werden?MVXA hat geschrieben:Wenn ich die RFile in kombination mit FileCreate benutze, kann ich in meine geöffnete Datei nichts schreiben.
Ein Beispiel mit Instruktionen posten oder so?
Code: Alles auswählen
Procedure.s WritePack(strDatei.s, lngPaketSize.l, strTempFolder.s)
DefType.l PakArchiv, lngI, TimeLine, FileBuffer
DefType.s strArchiv, strTemp
DefType.API_FileHandle Orginal
If Right(strTempFolder, 1) <> "\": strTempFolder + "\": EndIf
strArchiv = strTempFolder + GetFilePart(Left(strDatei, FindString(strDatei, ".", 1) - 1)) + ".tmp"
If FileSize(strArchiv) => 0
API_FileReadEx(@Orginal, strDatei, FileSize(strDatei))
PakArchiv = RFile_Create(strArchiv, lngPaketSize)
FileBuffer = AllocateMemory(lngPaketSize+1)
DeleteFile(strArchiv)
While API_EOF(Orginal) = #False
RtlFillMemory_(FileBuffer, lngPaketSize, 0)
API_ReadData(@Orginal, FileBuffer, lngPaketSize)
RFile_Put(PakArchiv, lngI, FileBuffer)
lngI+1: If (lngI % 1000) = 0: Delay(1): EndIf
Wend
RFile_Close(PakArchiv)
API_CloseFile(@Orginal)
ProcedureReturn strArchiv
EndIf
EndProcedure
Procedure ReadPack(strSource.s, strDest.s, strTempFolder.s)
DefType.l lngI, PakArchiv, FileBuffer, TimeLine
DefType.s strArchiv
DefType.API_FileHandle Orginal
If Right(strTempFolder, 1) <> "\": strTempFolder + "\": EndIf
strSource = strTempFolder + strSource
strArchiv = strTempFolder
strArchiv + GetFilePart(Left(strSource, FindString(strSource, ".", 1) - 1)) + ".tmp"
strDest = strTempFolder + strDest
PakArchiv = RFile_Open(strArchiv)
API_FileCreate(@Orginal, strDest)
FileBuffer = AllocateMemory(RFile_RecordLength(PakArchiv)+1)
For lngI = 0 To RFile_RecCount(PakArchiv)
RFile_Get(PakArchiv, lngI, FileBuffer)
API_WriteData(@Orginal, FileBuffer, RFile_RecordLength(PakArchiv))
If (lngI % 10000) = 0: Delay(1): EndIf
Next
API_CloseFile(@Orginal)
RFile_Close(PakArchiv)
EndProcedure
Debug WritePack("C:\Test.exe", 5*1024, "C:\")
;ThreadPriority(CreateThread(@WritePack(), 0), 16)
Debug "---"
ReadPack("Test.exe", "Test2.exe", "C:\")