FillMemory (*Memory , Size , Value)
SaveMemory (0 , *Memory , Size , "data.tmp")
That works with any size of memory and has no limits of any kind.
Even to take a snapshot of 32 Gigabytes of RAM or more...
All the best.
Thank You

Code: Select all
;-TOP
Procedure SaveMemory(*Memory, Size, FileName.s)
Protected r1, file, cnt
file = CreateFile(#PB_Any, FileName)
If file
cnt = WriteData(file, *Memory, Size)
CloseFile(file)
If cnt = Size
r1 = #True
EndIf
EndIf
ProcedureReturn r1
EndProcedure
mk-soft WriteData have 2GB limitmk-soft wrote: Sun Jun 26, 2022 5:32 pm You programme something like that yourself-1Code: Select all
;-TOP Procedure SaveMemory(*Memory, Size, FileName.s) Protected r1, file, cnt file = CreateFile(#PB_Any, FileName) If file cnt = WriteData(file, *Memory, Size) CloseFile(file) If cnt = Size r1 = #True EndIf EndIf ProcedureReturn r1 EndProcedure
sorryjacdelad wrote: Sun Jun 26, 2022 7:29 pm If you put the parameter Size last you can make it optional and make it even easier. Leaving it could trigger MemorySize().
Code: Select all
Procedure SaveMemory(*Memory, FileName.s, Size=-1)
Protected r1, file, cnt
file = CreateFile(#PB_Any, FileName)
If file
If Size = -1
Size = MemorySize(*Memory)
EndIf
cnt = WriteData(file, *Memory, Size)
CloseFile(file)
If cnt = Size
r1 = #True
EndIf
EndIf
ProcedureReturn r1
EndProcedure
jacdelad,jacdelad wrote: Mon Jun 27, 2022 4:56 am Parameters for functions can be optional, so you can make the function easier in case you want to write a whole memory block to disk:If you want to write the whole content of *Memory to disk, you don't need to specifiy Size.Code: Select all
Procedure SaveMemory(*Memory, FileName.s, Size=-1) Protected r1, file, cnt file = CreateFile(#PB_Any, FileName) If file If Size = -1 Size = MemorySize(*Memory) EndIf cnt = WriteData(file, *Memory, Size) CloseFile(file) If cnt = Size r1 = #True EndIf EndIf ProcedureReturn r1 EndProcedure
Code: Select all
Procedure SaveMemory(*Memory, FileName.s, Size=-1)
Protected r1, file, cnt
file = CreateFile(#PB_Any, FileName)
If file
If Size = -1
Size = MemorySize(*Memory)
EndIf
cnt = WriteData(file, *Memory, Size)
CloseFile(file)
If cnt = Size
r1 = #True
EndIf
EndIf
ProcedureReturn r1
EndProcedure
*mem=AllocateMemory(8*1024*1024*1024)
If *mem
;Fill your memory with whatever you want to
save.s=SaveFileRequester("Save my 8GB of memory","Default.dat","Dat-Files|*.dat|All Files|*.*",0)
If save<>""
SaveMemory(*mem,save)
;SaveMemory(*mem,save,8*1024*1024*1024);Not needed if I save all data from *mem
EndIf
FreeMemory(*mem)
Else
MessageRequester("Error","Couldn't assign 8GB of memory. :(",#PB_MessageRequester_Error)
EndIf
Sorry but isn't don't work, the code generate a 0 byte file. Thank youjacdelad wrote: Tue Jun 28, 2022 4:36 am Assuming you can allocate 8GB of memory:Code: Select all
Procedure SaveMemory(*Memory, FileName.s, Size=-1) Protected r1, file, cnt file = CreateFile(#PB_Any, FileName) If file If Size = -1 Size = MemorySize(*Memory) EndIf cnt = WriteData(file, *Memory, Size) CloseFile(file) If cnt = Size r1 = #True EndIf EndIf ProcedureReturn r1 EndProcedure *mem=AllocateMemory(8*1024*1024*1024) If *mem ;Fill your memory with whatever you want to save.s=SaveFileRequester("Save my 8GB of memory","Default.dat","Dat-Files|*.dat|All Files|*.*",0) If save<>"" SaveMemory(*mem,save) ;SaveMemory(*mem,save,8*1024*1024*1024);Not needed if I save all data from *mem EndIf FreeMemory(*mem) Else MessageRequester("Error","Couldn't assign 8GB of memory. :(",#PB_MessageRequester_Error) EndIf
I can't reproduce that fault, it works well for me.Simo_na wrote: Tue Jun 28, 2022 9:21 am Sorry but isn't don't work, the code generate a 0 byte file. Thank you
Yes Simo_na, I also get a 0 byte file.Simo_na wrote: Tue Jun 28, 2022 9:21 am Sorry but isn't don't work, the code generate a 0 byte file. Thank you
W10 Pro 21H2 here
Identical to mine.