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:\") .
.