[DllImport("kernel32.dll")]
static extern uint GetCompressedFileSize(string lpFileName,
IntPtr lpFileSizeHigh);
Private Declare Function GetCompressedFileSize Lib "kernel32" Alias "GetCompressedFileSizeA" (ByVal lpFileName As String, ByVal lpFileSizeHigh As IntPtr) As UInt32
Private Declare Function GetCompressedFileSize Lib "kernel32" Alias "GetCompressedFileSizeA" (ByVal lpFileName As String, lpFileSizeHigh As Long) As Long
None.
The C# code below correctly obtains the compressed file size if >4 GB. The sample VB code does not appear to do so properly.
Please add some!
[DllImport("kernel32.dll", SetLastError=true, EntryPoint="GetCompressedFileSize")]
static extern uint GetCompressedFileSizeAPI(string lpFileName, out uint lpFileSizeHigh);
public ulong GetCompressedFileSize(string filename)
{
uint high;
uint low;
low = GetCompressedFileSizeAPI(filename, out high);
int error = Marshal.GetLastWin32Error();
if (high == 0 && low == 0xFFFFFFFF && error != 0)
throw new Win32Exception(error);
else
return ((ulong)high << 32) + low;
}
Imports System.IO
·
·
·
Public Function CompressedFileSize(ByVal path As String) As Long
If File.Exist(path) Then
Try
Return Convert.ToInt64(GetCompressedFileSize(path, IntPtr.Zero))
Catch ex As Exception
Throw New IOException("The compressed size of the specified file could not be determined.")
End Try
End If
End Function
Private Sub GetFileSize(ByVal strPath As String)
MsgBox "The size of " + strPath " is " + CStr(GetCompressedFileSize(strPath, ByVal 0&)) + " bytes "
End Sub
The ManagedWindowsApi project (http://mwinapi.sourceforge.net) provides a ProcessMemoryChunk class to allocate and access memory of a different process.