zoukankan      html  css  js  c++  java
  • c# 磁盘空间计算 和 目录空间 、 文件大小 计算

    namespace CommonLibrary.SystemUtils
    {
        /// <summary>
        /// 表示存储空间大小计量单位
        /// </summary>
        public enum SizeUnitMode
        {
            /// <summary>
            /// 字节
            /// </summary>
            Byte,
            /// <summary>
            /// 千字节
            /// </summary>
            KiloByte,
            /// <summary>
            /// 兆字节
            /// </summary>
            MegaByte,
            /// <summary>
            /// 亿字节
            /// </summary>
            GigaByte,
    
    
        }//end enum SizeUnitMode
    }//end namespace CommonLibrary.SystemUtils
    存储空间大小计量单位
    #region 磁盘空间计算
            ///<summary> 
            ///获取指定驱动器上存储空间的总大小(以字节为单位) 
            /// <example>示例1:获取C盘上存储空间的总大小
            /// Int64 totalSize=CommonLibrary.SystemUtils.DiskUtil.GetTotalSize("c");
            /// <code>
            /// <![CDATA[
            ///   class MyClass 
            ///   {
            ///      //模拟
            ///      public void TestGetTotalSize() 
            ///      {
            ///         Int64 totalSize = CommonLibrary.SystemUtils.DiskUtil.GetTotalSize("c");
            ///       
            ///       }//end method
            ///   }//end class
            ///   ]]>
            /// </code>
            /// </example>
            ///</summary> 
            ///<param name="driveName">表示驱动器标识的字母,如C、D、E、F等。注意:它可以是从“a”到“z”的大写或小写字母。Null 值无效。</param> 
            ///<returns>以字节为单位的驱动器上存储空间的总大小</returns> 
            public static System.Int64 GetTotalSize(string driveName)
            {
                System.Int64 totalSize = 0;
               
                totalSize = System.Convert.ToInt64(GetTotalSize(driveName, SizeUnitMode.Byte));
               
                return totalSize;
            }//end method
    
            ///<summary> 
            ///获取指定驱动器上存储空间的总大小
            /// <example>示例1:获取C盘上存储空间的总大小,小数形式更加精确
            /// double totalSizesizeMB = CommonLibrary.SystemUtils.DiskUtil.GetTotalSize("c", CommonLibrary.SystemUtils.SizeUnitMode.MegaByte);
            /// double totalSizesizeGB = CommonLibrary.SystemUtils.DiskUtil.GetTotalSize("c", CommonLibrary.SystemUtils.SizeUnitMode.GigaByte);
            /// double totalSizesizeB = CommonLibrary.SystemUtils.DiskUtil.GetTotalSize("c", CommonLibrary.SystemUtils.SizeUnitMode.Byte);      
            /// <code>
            /// <![CDATA[
            ///   class MyClass 
            ///   {
            ///      //模拟
            ///      public void TestGetTotalSize() 
            ///      {
            ///           double totalSizesizeMB = CommonLibrary.SystemUtils.DiskUtil.GetTotalSize("c", CommonLibrary.SystemUtils.SizeUnitMode.MegaByte);
            ///           double totalSizesizeGB = CommonLibrary.SystemUtils.DiskUtil.GetTotalSize("c", CommonLibrary.SystemUtils.SizeUnitMode.GigaByte);
            ///           double totalSizesizeB = CommonLibrary.SystemUtils.DiskUtil.GetTotalSize("c", CommonLibrary.SystemUtils.SizeUnitMode.Byte); 
            ///       
            ///       }//end method
            ///   }//end class
            ///   ]]>
            /// </code>
            /// </example>
            ///</summary> 
            ///<param name="driveName">表示驱动器标识的字母,如C、D、E、F等。注意:它可以是从“a”到“z”的大写或小写字母。Null 值无效。</param> 
            ///<param name="sizeUnitMode">计算空间时使用的单位</param> 
            ///<returns>以指定单位表示的驱动器上存储空间的总大小</returns> 
            public static System.Double GetTotalSize(string driveName,SizeUnitMode sizeUnitMode)
            {
                System.Double totalSize = 0;
                driveName = driveName + ":" + System.IO.Path.DirectorySeparatorChar;
                System.IO.DriveInfo[] drives = System.IO.DriveInfo.GetDrives();
                foreach (System.IO.DriveInfo drive in drives)
                {
                    if (drive.Name.ToLower() == driveName.ToLower())
                    {
                        totalSize = drive.TotalSize;
                    }
                }
    
                switch (sizeUnitMode)
                {
                    case SizeUnitMode.MegaByte:
                        totalSize = totalSize / (1024 * 1024 );
                        break;
                    case SizeUnitMode.GigaByte:
                        totalSize = totalSize / (1024 * 1024 * 1024);
    
                        break;
                    default :
                        break;
    
                }//end switch
                return totalSize;
            }//end method
    
           
    
            ///<summary> 
            ///获取指定驱动器上剩余空间的总大小(以字节为单位) 
            /// <example>示例1:获取C盘上剩余空间的总大小
            /// Int64 freeSize = CommonLibrary.SystemUtils.DiskUtil.GetFreeSpaceSize("c");
            /// <code>
            /// <![CDATA[
            ///   class MyClass 
            ///   {
            ///      //模拟
            ///      public void TestGetFreeSpaceSize() 
            ///      {
            ///         Int64 freeSize = CommonLibrary.SystemUtils.DiskUtil.GetFreeSpaceSize("c");
            ///       
            ///       }//end method
            ///   }//end class
            ///   ]]>
            /// </code>
            /// </example>
            ///</summary> 
            ///<param name="driveName">表示驱动器标识的字母,如C、D、E、F等</param> 
            ///<returns>以字节为单位的驱动器上剩余空间的总大小</returns> 
            public static long GetFreeSpaceSize(string driveName)
            {
                System.Int64  freeSpace=0;
     
    
                freeSpace = System.Convert.ToInt64(GetFreeSpaceSize(driveName, SizeUnitMode.Byte));
              
                return freeSpace;
            }//end method
    
    
            ///<summary> 
            /// 获取指定驱动器上剩余空间的总大小
            /// <example>示例1:获取C盘上剩余空间的总大小,小数形式更加精确
            /// double freeSizeMB = CommonLibrary.SystemUtils.DiskUtil.GetFreeSpaceSize("c", CommonLibrary.SystemUtils.SizeUnitMode.MegaByte);
            /// double freeSizeGB = CommonLibrary.SystemUtils.DiskUtil.GetFreeSpaceSize("c", CommonLibrary.SystemUtils.SizeUnitMode.GigaByte);
            /// double freeSizeB = CommonLibrary.SystemUtils.DiskUtil.GetFreeSpaceSize("c", CommonLibrary.SystemUtils.SizeUnitMode.Byte);
            /// <code>
            /// <![CDATA[
            ///   class MyClass 
            ///   {
            ///      //模拟
            ///      public void TestGetFreeSpaceSize() 
            ///      {
            ///           double freeSizeMB = CommonLibrary.SystemUtils.DiskUtil.GetFreeSpaceSize("c", CommonLibrary.SystemUtils.SizeUnitMode.MegaByte);
            ///           double freeSizeGB = CommonLibrary.SystemUtils.DiskUtil.GetFreeSpaceSize("c", CommonLibrary.SystemUtils.SizeUnitMode.GigaByte);
            ///           double freeSizeB = CommonLibrary.SystemUtils.DiskUtil.GetFreeSpaceSize("c", CommonLibrary.SystemUtils.SizeUnitMode.Byte);
            ///       
            ///       }//end method
            ///   }//end class
            ///   ]]>
            /// </code>
            /// </example>
            ///</summary> 
            ///<param name="driveName">表示驱动器标识的字母,如C、D、E、F等。注意:它可以是从“a”到“z”的大写或小写字母。Null 值无效。</param> 
            ///<param name="sizeUnitMode">计算空间时使用的单位</param> 
            ///<returns>以指定单位表示的驱动器上剩余空间的总大小</returns> 
            public static System.Double GetFreeSpaceSize(string driveName, SizeUnitMode sizeUnitMode)
            {
                System.Int64 freeSpace = 0;
                driveName = driveName + ":" + System.IO.Path.DirectorySeparatorChar;
                System.IO.DriveInfo[] drives = System.IO.DriveInfo.GetDrives();
                foreach (System.IO.DriveInfo drive in drives)
                {
                    if (drive.Name.ToLower() == driveName.ToLower())
                    {
                        freeSpace = drive.TotalFreeSpace;
                    }
                }
    
                //单位换算
                switch (sizeUnitMode)
                {
                    case SizeUnitMode.MegaByte:
                        freeSpace = freeSpace / (1024 * 1024);
                        break;
                    case SizeUnitMode.GigaByte:
                        freeSpace = freeSpace / (1024 * 1024 * 1024);
    
                        break;
                    default:
                        break;
    
                }//end switch
                return freeSpace;
            }//end method
    
            #endregion 磁盘空间计算
    磁盘空间计算
    #region 目录空间计算
            /// <summary>
            /// 获取指定目录占用的存储空间的总大小(以字节为单位) 
            /// <example>示例1:获取 C:Resource 目录占用的存储空间的总大小
            /// Int64 directorySize = CommonLibrary.SystemUtils.DiskUtil.GetDirectorySize(@"C:Resource");
            /// <code>
            /// <![CDATA[
            ///   class MyClass 
            ///   {
            ///      //模拟
            ///      public void TestGetDirectorySize() 
            ///      {
            ///           Int64 directorySize = CommonLibrary.SystemUtils.DiskUtil.GetDirectorySize(@"C:Resource");
            ///       
            ///       }//end method
            ///   }//end class
            ///   ]]>
            /// </code>
            /// </example>
            /// </summary>
            /// <param name="directoryPath">表示目录的标识,如 C:myDirectory 等</param>
            /// <returns>以字节为单位的目录占用的存储空间的总大小</returns>
            public static System.Int64 GetDirectorySize(string directoryPath)
            {
                System.Int64 size = 0;
                
                size = System.Convert.ToInt64(GetDirectorySize(directoryPath, SizeUnitMode.Byte));
               
                return size;
            }//end method 
    
            ///<summary> 
            ///获取指定目录占用的存储空间的总大小,小数形式更加精确
            /// <example>示例1:获取 C:Resource 目录占用的存储空间的总大小
            /// double directorySizeMB = CommonLibrary.SystemUtils.DiskUtil.GetDirectorySize(@"C:Resource", CommonLibrary.SystemUtils.SizeUnitMode.MegaByte);
            /// double directorySizeGB = CommonLibrary.SystemUtils.DiskUtil.GetDirectorySize(@"C:Resource", CommonLibrary.SystemUtils.SizeUnitMode.GigaByte);
            /// double directorySizeBB = CommonLibrary.SystemUtils.DiskUtil.GetDirectorySize(@"C:Resource", CommonLibrary.SystemUtils.SizeUnitMode.Byte);
            /// <code>
            /// <![CDATA[
            ///   class MyClass 
            ///   {
            ///      //模拟
            ///      public void TestGetDirectorySize() 
            ///      {
            ///          double directorySizeMB = CommonLibrary.SystemUtils.DiskUtil.GetDirectorySize(@"C:Resource", CommonLibrary.SystemUtils.SizeUnitMode.MegaByte);
            ///          double directorySizeGB = CommonLibrary.SystemUtils.DiskUtil.GetDirectorySize(@"C:Resource", CommonLibrary.SystemUtils.SizeUnitMode.GigaByte);
            ///          double directorySizeBB = CommonLibrary.SystemUtils.DiskUtil.GetDirectorySize(@"C:Resource", CommonLibrary.SystemUtils.SizeUnitMode.Byte);
            ///       
            ///       }//end method
            ///   }//end class
            ///   ]]>
            /// </code>
            /// </example>
            ///</summary> 
            ///<param name="directoryPath">表示目录的标识,如 C:myDirectory 等</param>
            ///<param name="sizeUnitMode">计算空间时使用的单位</param> 
            ///<returns>以指定单位表示的目录占用的存储空间的总大小</returns> 
            public static System.Double GetDirectorySize(string directoryPath, SizeUnitMode sizeUnitMode)
            {
                System.Double size = 0;
                size = GetDirectorySizeDouble(directoryPath);
    
                //单位换算
                switch (sizeUnitMode)
                {
                    case SizeUnitMode.MegaByte:
                        size = size / (1024 * 1024);
                        break;
                    case SizeUnitMode.GigaByte:
                        size = size / (1024 * 1024 * 1024);
    
                        break;
                    default:
                        break;
    
                }//end switch
                return size;
            }//end method
    
            ///<summary> 
            ///获取指定目录占用的存储空间的总大小(以字节为单位)
            /// <example>示例1:获取 C:Resource 目录占用的存储空间的总大小
            /// Int64 directorySize = CommonLibrary.SystemUtils.DiskUtil.GetDirectorySizeDouble(@"C:Resource");
            /// <code>
            /// <![CDATA[
            ///   class MyClass 
            ///   {
            ///      //模拟
            ///      public void TestGetDirectorySizeDouble() 
            ///      {
            ///           Int64 directorySize = CommonLibrary.SystemUtils.DiskUtil.GetDirectorySizeDouble(@"C:Resource");
            ///       
            ///       }//end method
            ///   }//end class
            ///   ]]>
            /// </code>
            /// </example>
            ///</summary> 
            ///<param name="directoryPath">表示目录的标识,如 C:myDirectory 等</param>
            ///<returns>目录占用的存储空间的总大小</returns> 
            private static System.Double GetDirectorySizeDouble(string directoryPath)
            {
                System.Double size = 0;
                System.IO.DirectoryInfo directoryInfo = new System.IO.DirectoryInfo(directoryPath);
    
                //计算当前目录中所有文件的总大小
                System.IO.FileInfo[] fileInfoList = directoryInfo.GetFiles();
                foreach (System.IO.FileInfo f in fileInfoList)
                {
                    size += f.Length;
                }
    
    
                //计算子目录大小
                System.IO.DirectoryInfo[] directoryInfoList = directoryInfo.GetDirectories();
                foreach (System.IO.DirectoryInfo d in directoryInfoList)
                {
                    size += GetDirectorySizeDouble(d.FullName);
                }
    
    
                return size;
            }//end method
            #endregion 目录空间计算
    目录空间计算
    #region 文件空间计算
            //<summary> 
            ///获取指定文件占用的存储空间的总大小,返回值小数精确且带单位
            /// <example>示例1:获取 C:Resourcefile1.txt 文件占用的存储空间的总大小
            /// String fileSize = CommonLibrary.SystemUtils.FileUtil.GetFileSize(@"C:Resourcefile1.txt");
            /// <code>
            /// <![CDATA[
            ///   class MyClass 
            ///   {
            ///      //模拟
            ///      public void TestGetFileSize() 
            ///      {
            ///          
            ///          String fileSize = CommonLibrary.SystemUtils.FileUtil.GetFileSize(@"C:Resourcefile1.txt");
            ///       
            ///       }//end method
            ///   }//end class
            ///   ]]>
            /// </code>
            /// </example>
            ///</summary> 
            ///<param name="fileFullPath">表示文件的标识,如 C:Resourcefile1.txt 等</param>
            ///<returns>以特定单位表示的文件占用的存储空间的总大小</returns> 
            public static System.String GetFileSizeString(string fileFullPath)
            {
                System.Double size = 0;
                CommonLibrary.SystemUtils.SizeUnitMode sizeUnitMode;
                size = GetFileSize(fileFullPath, out sizeUnitMode);
                string result = string.Empty;
                //单位换算
                switch (sizeUnitMode)
                {
                    case SizeUnitMode.Byte:
                        result = System.String.Format("{0} B", size.ToString("N", System.Globalization.CultureInfo.InvariantCulture));
    
                        break;
                    case SizeUnitMode.KiloByte:
                        result = System.String.Format("{0} KB", size.ToString("N", System.Globalization.CultureInfo.InvariantCulture));
                        break;
                    case SizeUnitMode.MegaByte:
                        result = System.String.Format("{0} MB", size.ToString("N", System.Globalization.CultureInfo.InvariantCulture));
                        break;
                    case SizeUnitMode.GigaByte:
                        result = System.String.Format("{0} G", size.ToString("N", System.Globalization.CultureInfo.InvariantCulture));
    
                        break;
                    default:
                        break;
    
                }//end switch
    
                return result;
    
            }//end method
    
           
    
            ///<summary> 
            ///获取指定文件占用的存储空间的总大小,返回计算单位,小数精确
            /// <example>示例1:获取 C:Resourcefile1.txt 文件占用的存储空间的总大小
            /// CommonLibrary.SystemUtils.SizeUnitMode unitMode=CommonLibrary.SystemUtils.SizeUnitMode.MegaByte;
            /// double fileSize = CommonLibrary.SystemUtils.FileUtil.GetFileSize(@"C:Resourcefile1.txt", out unitMode);
            /// <code>
            /// <![CDATA[
            ///   class MyClass 
            ///   {
            ///      //模拟
            ///      public void TestGetFileSize() 
            ///      {
            ///          CommonLibrary.SystemUtils.SizeUnitMode unitMode=CommonLibrary.SystemUtils.SizeUnitMode.MegaByte;
            ///          double fileSize = CommonLibrary.SystemUtils.FileUtil.GetFileSize(@"C:Resourcefile1.txt", out unitMode);
            ///       
            ///       }//end method
            ///   }//end class
            ///   ]]>
            /// </code>
            /// </example>
            ///</summary> 
            ///<param name="fileFullPath">表示文件的标识,如 C:Resourcefile1.txt 等</param>
            ///<param name="sizeUnitMode">计算空间时使用的单位</param> 
            ///<returns>以指定单位表示的文件占用的存储空间的总大小</returns> 
            public static System.Double GetFileSize(string fileFullPath, out SizeUnitMode sizeUnitMode)
            {
                System.Double size = 0;
                size = GetFileSizeDouble(fileFullPath);
                if (size >= 0 && size < 1024)
                {
                    sizeUnitMode = SizeUnitMode.Byte;
                    return size;
    
                }
    
                System.Double kb = size / 1024;
                if (kb >= 1 && kb < 1024)
                {
                    sizeUnitMode = SizeUnitMode.KiloByte;
                    return kb;
                }
    
    
                System.Double mb = size / (1024 * 1024);
                if (mb >= 1 && mb < 1024)
                {
                    sizeUnitMode = SizeUnitMode.MegaByte;
                    return mb;
                }
    
                System.Double gb = size / (1024 * 1024 * 1024);
                if (gb >= 1)
                {
                    sizeUnitMode = SizeUnitMode.GigaByte;
                    return gb;
                }
    
                sizeUnitMode = SizeUnitMode.Byte;
                return size;
            }//end method
    
    
            /// <summary>
            /// 获取指定文件占用的存储空间的总大小(以字节为单位) 
            /// <example>示例1:获取 C:Resourcefile1.txt 占用的存储空间的总大小
            /// Int64 fileSize = CommonLibrary.SystemUtils.FileUtil.GetFileSize(@"C:Resourcefile1.txt");
            /// <code>
            /// <![CDATA[
            ///   class MyClass 
            ///   {
            ///      //模拟
            ///      public void TestGetFileSize() 
            ///      {
            ///           Int64 fileSize = CommonLibrary.SystemUtils.FileUtil.GetFileSize(@"C:Resourcefile1.txt");
            ///       
            ///       }//end method
            ///   }//end class
            ///   ]]>
            /// </code>
            /// </example>
            /// </summary>
            /// <param name="fileFullPath">表示文件的标识,如 C:Resourcefile1.txt 等</param>
            /// <returns>以字节为单位的文件占用的存储空间的总大小</returns>
            public static System.Int64 GetFileSize(string fileFullPath)
            {
                System.Int64 size = 0;
    
                size = System.Convert.ToInt64(GetFileSize(fileFullPath, SizeUnitMode.Byte));
               
                return size;
            }//end method 
    
            ///<summary> 
            ///获取指定文件占用的存储空间的总大小,小数形式更加精确
            /// <example>示例1:获取 C:Resourcefile1.txt 文件占用的存储空间的总大小
            /// double fileSizeMB = CommonLibrary.SystemUtils.FileUtil.GetFileSize(@"C:Resourcefile1.txt", CommonLibrary.SystemUtils.SizeUnitMode.MegaByte);
            /// double fileSizeGB = CommonLibrary.SystemUtils.FileUtil.GetFileSize(@"C:Resourcefile1.txt", CommonLibrary.SystemUtils.SizeUnitMode.GigaByte);
            /// double fileSizeBB = CommonLibrary.SystemUtils.FileUtil.GetFileSize(@"C:Resourcefile1.txt", CommonLibrary.SystemUtils.SizeUnitMode.Byte);
            /// <code>
            /// <![CDATA[
            ///   class MyClass 
            ///   {
            ///      //模拟
            ///      public void TestGetFileSize() 
            ///      {
            ///          double fileSizeMB = CommonLibrary.SystemUtils.FileUtil.GetFileSize((@"C:Resourcefile1.txt", CommonLibrary.SystemUtils.SizeUnitMode.MegaByte);
            ///          double fileSizeGB = CommonLibrary.SystemUtils.FileUtil.GetFileSize((@"C:Resourcefile1.txt", CommonLibrary.SystemUtils.SizeUnitMode.GigaByte);
            ///          double fileSizeBB = CommonLibrary.SystemUtils.FileUtil.GetFileSize((@"C:Resourcefile1.txt", CommonLibrary.SystemUtils.SizeUnitMode.Byte);
            ///       
            ///       }//end method
            ///   }//end class
            ///   ]]>
            /// </code>
            /// </example>
            ///</summary> 
            ///<param name="fileFullPath">表示文件的标识,如 C:Resourcefile1.txt 等</param>
            ///<param name="sizeUnitMode">计算空间时使用的单位</param> 
            ///<returns>以指定单位表示的文件占用的存储空间的总大小</returns> 
            public static System.Double GetFileSize(string fileFullPath, SizeUnitMode sizeUnitMode)
            {
                System.Double size = 0;
                size = GetFileSizeDouble(fileFullPath);
    
                //单位换算
                switch (sizeUnitMode)
                {
                    case SizeUnitMode.MegaByte:
                        size = size / (1024 * 1024);
                        break;
                    case SizeUnitMode.GigaByte:
                        size = size / (1024 * 1024 * 1024);
    
                        break;
                    default:
                        break;
    
                }//end switch
                return size;
            }//end method
    
            ///<summary> 
            ///获取指定文件占用的存储空间的总大小(以字节为单位)
            /// <example>示例1:获取 C:Resourcefile1.txt 文件占用的存储空间的总大小
            /// Int64 fileSize = CommonLibrary.SystemUtils.FileUtil.GetFileSizeDouble(@"C:Resourcefile1.txt");
            /// <code>
            /// <![CDATA[
            ///   class MyClass 
            ///   {
            ///      //模拟
            ///      public void TestGetFileSizeDouble() 
            ///      {
            ///           Int64 fileSize = CommonLibrary.SystemUtils.FileUtil.GetFileSizeDouble(@"C:Resourcefile1.txt");
            ///       
            ///       }//end method
            ///   }//end class
            ///   ]]>
            /// </code>
            /// </example>
            ///</summary> 
            ///<param name="directoryPath">表示文件的标识,如 C:Resourcefile1.txt 等</param>
            ///<returns>文件占用的存储空间的总大小</returns> 
            private static System.Double GetFileSizeDouble(string fileFullPath)
            {
                System.Double size = 0;
                System.IO.FileInfo fileInfo = new System.IO.FileInfo(fileFullPath);
    
                //计算当前目录中所有文件的总大小
                size = fileInfo.Length;
               
                return size;
            }//end method
            #endregion 文件空间计算
    文件大小计算
  • 相关阅读:
    最简单的基于FFMPEG+SDL的音频播放器 ver2 (採用SDL2.0)
    JBPM——工作流概念
    android项目中的拍照和本地图片截图
    hunnu--11547--你的组合数学学得怎样?
    POJ 2253
    [ACM] POJ 3349 Snowflake Snow Snowflakes(哈希查找,链式解决冲突)
    Redis简述
    C/C++,从未过时的编程语言之父
    Android4.4 Framework分析——getContentResolver启动ContentProvider的过程
    2012_p2 寻宝 (treasure.cpp/c/pas)
  • 原文地址:https://www.cnblogs.com/chengjunwei/p/4056367.html
Copyright © 2011-2022 走看看