Ich hab mal wieder ein kleines Problem und würde euch gerne um Rat fragen. Ich habe für ein Programm 2 Routinen geschrieben, um Dateien zu zerlegen um sie besser zu bearbeiten. Die Funktion um die Datei einzulesen funktioniert super. Nur wenn ich die Datei auslesen will gibt es Probleme
Code: Alles auswählen
Procedure.s WritePack(strDatei.s, lngPaketSize.l, strTempFolder.s)
DefType.l PakArchiv, lngI, OrginalFile, TimeLine, FileBuffer
DefType.s strArchiv, strTemp
If Right(strTempFolder, 1) <> "\": strTempFolder + "\": EndIf
strArchiv = strTempFolder + GetFilePart(Left(strDatei, FindString(strDatei, ".", 1) - 1)) + ".tmp"
OrginalFile = ReadFile(#PB_Any, strDatei)
PakArchiv = RFile_Create(strArchiv, lngPaketSize)
UseFile(OrginalFile)
FileBuffer = AllocateMemory(lngPaketSize+1)
DeleteFile(strArchiv)
TimeLine = gettickcount_()
While Eof(OrginalFile) = #False
RtlFillMemory_(FileBuffer, lngPaketSize, 0)
UseFile(OrginalFile): ReadData(FileBuffer, lngPaketSize)
RFile_Put(PakArchiv, lngI, FileBuffer)
lngI+1: If (lngI % 100) = 0: Delay(1): EndIf
Wend
Debug "Time: " + Str(gettickcount_()-TimeLine)
Debug "Elmt: " + Str(RFile_RecCount(PakArchiv))
Debug RFile_MaxRecord(PakArchiv)
RFile_Close(PakArchiv)
CloseFile(OrginalFile)
ProcedureReturn strArchiv
EndProcedure
Procedure ReadPack(strSource.s, strDest.s, strTempFolder.s)
DefType.l lngI, PakArchiv, OrginalFile, FileBuffer, TimeLine
DefType.s strArchiv
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)
OrginalFile = CreateFile(#PB_Any, strDest)
FileBuffer = AllocateMemory(RFile_RecordLength(PakArchiv)+1)
For lngI = 0 To RFile_RecCount(PakArchiv)
RFile_Get(PakArchiv, lngI, FileBuffer)
UseFile(OrginalFile)
WriteData(FileBuffer, RFile_RecordLength(PakArchiv))
If (lngI % 100) = 0: Delay(1): EndIf
Next
CloseFile(OrginalFile)
RFile_Close(PakArchiv)
EndProcedure
Debug WritePack("C:\Test.exe", 5*1024, "C:\")
;ThreadPriority(CreateThread(@WritePack(), 0), 16)
Debug "---"
ReadPack("Test.exe", "Test2.exe", "C:\")

