Page 1 of 1
CreateFilledFile (CreateSizedFile)
Posted: Fri Jul 07, 2006 12:56 pm
by b1be
Code updated For 5.20+
Code: Select all
Procedure CreateFilledFile(Name.s,fsize.q)
CreateFile(0,Name)
FileSeek(0,fsize-1)
WriteByte(0,0)
CloseFile(0)
EndProcedure
Test
Should create "Temp.temp" with exact size of 123Bytes
dont know if was posted/or was in help ... but it's a Goodie
Posted: Fri Jul 07, 2006 1:25 pm
by Flype
As the PB manual said, you must check the result of CreateFile().
No offense, it's just cleaner this way.
Code: Select all
Procedure CreateFilledFile(Name.s, fsize.q)
Protected file.l = CreateFile(#PB_Any, Name)
If file
FileSeek(file, fsize-1)
WriteByte(file, 0)
CloseFile(file)
ProcedureReturn #True
EndIf
EndProcedure
Posted: Fri Jul 07, 2006 1:28 pm
by b1be
none taken ... i still find this usefull tip.. and thanks for posting
Code: Select all
Procedure CreateFilledFile(Name.s, fsize.q)
Protected file.l = CreateFile(#PB_Any, Name)
If file
If fsize<=0
CloseFile(file)
ProcedureReturn #True
Else
FileSeek(file, fsize-1)
WriteByte(file, 0)
CloseFile(file)
ProcedureReturn #True
EndIf
EndIf
EndProcedure
fixed a bug with filesize=0
Posted: Fri Jul 07, 2006 2:55 pm
by Bonne_den_kule
This one is much faster...
Code: Select all
Procedure CreateFilledFile (Filename.s, NewLength.q)
Define Filehandle.l
Filehandle = CreateFile_(@Filename, #GENERIC_READ|#GENERIC_WRITE,#FILE_SHARE_READ|#FILE_SHARE_WRITE, #Null, #CREATE_ALWAYS, #FILE_ATTRIBUTE_NORMAL, #Null)
If Filehandle
If SetFilePointer_(Filehandle, NewLength, (@NewLength)+4, #FILE_BEGIN )
If SetEndOfFile_(Filehandle)
If CloseHandle_(Filehandle)
Else
ProcedureReturn 0
EndIf
Else
ProcedureReturn 0
EndIf
Else
ProcedureReturn 0
EndIf
Else
ProcedureReturn 0
EndIf
ProcedureReturn 1
EndProcedure
Posted: Sat Jul 08, 2006 6:24 pm
by dell_jockey
Bonne_den_kule wrote:This one is much faster...
Code: Select all
Procedure CreateFilledFile (Filename.s, NewLength.q)
Define Filehandle.l
Filehandle = CreateFile_(@Filename, #GENERIC_READ|#GENERIC_WRITE,#FILE_SHARE_READ|#FILE_SHARE_WRITE, #Null, #CREATE_ALWAYS, #FILE_ATTRIBUTE_NORMAL, #Null)
If Filehandle
If SetFilePointer_(Filehandle, NewLength, (@NewLength)+4, #FILE_BEGIN )
If SetEndOfFile_(Filehandle)
If CloseHandle_(Filehandle)
Else
ProcedureReturn 0
EndIf
Else
ProcedureReturn 0
EndIf
Else
ProcedureReturn 0
EndIf
Else
ProcedureReturn 0
EndIf
ProcedureReturn 1
EndProcedure
Indeed, it's faster, at least when you need it on a Windows box; unfortunately, faster code most of the time is less portable....
Posted: Sat Jul 08, 2006 7:20 pm
by bingo
@dell_jockey
Debug CreateFilledFile("e:\dummy.tmp",$FFFFFFFFF)
Debug CreateFilledFile("e:\dummy.tmp",$FFFFFFFFFF)
any limitations of SetFilePointer ???
[xp/sp2/ntfs]
Posted: Sat Jul 08, 2006 7:29 pm
by netmaestro
Platform SDK wrote:The SetFilePointer function moves the file pointer of an open file.
This function stores the file pointer in two LONG values. To work with file pointers that are larger than a single LONG value, it is easier to use the SetFilePointerEx function.
Posted: Sun Jul 09, 2006 12:09 pm
by Bonne_den_kule
bingo wrote:@dell_jockey
Debug CreateFilledFile("e:\dummy.tmp",$FFFFFFFFF)
Debug CreateFilledFile("e:\dummy.tmp",$FFFFFFFFFF)
any limitations of SetFilePointer ???
[xp/sp2/ntfs]
Why are you trying to make a 1000 GB file ?
