 |
SoftTree Technologies
Technical Support Forums
|
|
Author |
Message |
DLUTER
Joined: 16 Mar 2007 Posts: 44 Country: United States |
|
Limitation on FileSize command |
|
I'm trying to use filesize to calculate the diskspace used by some of our backup files in a single folder. On version 3.4.24 when I use the filesize command on a file greater than 4GB in size I'm getting a byte count of 4294967295 (4GB). When I use version 3.4.31 it simply states that the file doesn't exist. Do you have a patch or a workaround for this by any chance?
|
|
Thu May 29, 2008 1:06 pm |
|
 |
SysOp
Site Admin
Joined: 26 Nov 2006 Posts: 7948
|
|
|
|
I couldn't find any difference in behavior between 3.4.24 and 3.4.31. I think you came across a timing issue. As long as file is less then 4GB both versions cane return size correctly. If it is over 4GB they both fail. The reason is simple, both versions use DWORD datatype for the file size return. Obviously, any value that doesn't fit in 4 bytes causes the FileSize to fail and it returns default message "File not found"
This is a kind of legacy code developed ages ago when 2+GB files could not be stored in regular disk partition. Nowadays, files of that and larger size are not that rare, but the internal code has never been updated to support them.
I can offer 2 workarounds.
In JAL you can call the DOS dir command
 |
 |
Dim pid, number
Dim size, number
Dim line, string
RunAndWait( "cmd /C dir C:\\path\\to\\my\\file.txt > C:\\temp\\temp.txt", "", 0, pid)
FileReadLine( "C:\\temp\\temp.txt", 7, line)
Trim(line, line)
Replace(line, 1, 9, "", line)
Trim(line, line)
GetToken(" ", line, size) |
It is much easier in VBScript
 |
 |
Dim fso, f, s
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile("C:\\path\\to\\my\\file.txt")
MsgBox f.size |
You can also use the same method(s) do get size of the entire folder. In JAL use did *.* and parse out the last line with the total bytes number. In VbScript simply replace GetFile call with GetFolder.
 |
 |
Dim fso, f, s
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder("C:\\path\\to\\my\\folder")
MsgBox f.size |
|
|
Thu May 29, 2008 3:52 pm |
|
 |
DLUTER
Joined: 16 Mar 2007 Posts: 44 Country: United States |
|
|
|
Any news on when the older code will be updated? The job I have will be scrolling over 100's of backup files.
|
|
Fri May 30, 2008 10:57 am |
|
 |
SysOp
Site Admin
Joined: 26 Nov 2006 Posts: 7948
|
|
|
|
It is likely possible to provide a fix in the next maintenance release, but unfortunately I don't have a date when that release will be available.
Can you use a VBScript based job for this task?
|
|
Fri May 30, 2008 1:02 pm |
|
 |
DLUTER
Joined: 16 Mar 2007 Posts: 44 Country: United States |
|
|
|
For this instance i'll probably use something similiar to your JAL example.
Since everything is in one directory i'll do a "dir *.* /s > dirout.txt" to get everything and then parse the output file to grab the "Total Files Listed" entry. Convert that to a number and divide by 1073741824 (1GB) and go from there.
Total Files Listed:
32 File(s) 82,089,475,072 bytes
20 Dir(s) 1,420,386,271,232 bytes free
I'll use the vbscript for another job where i'm moving these large files to archive drives and the script needs to see if the files will fit or need to be placed on another drive.
Thanks for the help.
|
|
Fri May 30, 2008 1:12 pm |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|
|