Finding file size in bytes on serverside using c#

Hi,
This requirement will come mainly while doing I/O operations (in my opinion it is obviously one of tedious taks carried by server). Here am showing you the snippet of code to find out the number of bytes of a file. here am using this code to validate the size of the file on server side. Which is a common requirement while doing file uploads.

Here is the snippet.

private static long GetFileSizeOnDisk(string filelocation)
{
  FileInfo info = new FileInfo(file);
  uint dummy, sectorsPerCluster, bytesPerSector;
  int result = GetDiskFreeSpaceW(info.Directory.Root.FullName, out sectorsPerCluster, out bytesPerSector, out dummy, out dummy);
  if (result == 0) throw new Win32Exception();
  uint clusterSize = sectorsPerCluster * bytesPerSector;
  uint hosize;
  uint losize = GetCompressedFileSizeW(file, out hosize);
  long size;
  size = (long)hosize << 32 | losize;
  return ((size + clusterSize - 1) / clusterSize) * clusterSize;
}

[DllImport("kernel32.dll")]
static extern uint GetCompressedFileSizeW([In, MarshalAs(UnmanagedType.LPWStr)] string lpFileName,
   [Out, MarshalAs(UnmanagedType.U4)] out uint lpFileSizeHigh);

[DllImport("kernel32.dll", SetLastError = true, PreserveSig = true)]
static extern int GetDiskFreeSpaceW([In, MarshalAs(UnmanagedType.LPWStr)] string lpRootPathName,
   out uint lpSectorsPerCluster, out uint lpBytesPerSector, out uint lpNumberOfFreeClusters,
   out uint lpTotalNumberOfClusters);


Thanks & Regards,
Pavan N

Comments

Popular posts from this blog

Download file using WCF REST services

server side printing / PDF conversions using c# and asp.net/wcf service