随机顺序码是什么文件和顺序文件占空间大小

C#获取文件夹及文件的大小与占用空间的方法
投稿:shichen2014
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了C#获取文件夹及文件的大小与占用空间的方法,需要的朋友可以参考下
本文详细介绍了利用C#实现根据路径,计算这个路径所占用的磁盘空间的方法 。
网上有很多资料都是获取文件夹/文件的大小的。对于占用空间的很少有完整的代码。这里介绍实现这一功能的完整代码,供大家参考一下。
首先说下文件夹/文件大小与占用空间的区别。
这个是硬盘分区格式有关 大小是文件的实际大小,而占用空间是占硬盘的实际空间 以FAT32格式为例,硬盘的基本存储单位是簇,在FAT32中一簇是4KB 那么,也就是说即使文件只有1个字节,在硬盘上也要占到4KB的空间 如果文件是4KB零1个字节,那就要占用8KB的空间,以此类推。
结论: 大小是文件的实际大小,而占用空间是占硬盘的实际空间。
那么问题来了。怎样获取本机的簇有多少字节呢?
首先可以通过windows API获取磁盘的相关信息。
//调用windows API获取磁盘空闲空间
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
static extern bool GetDiskFreeSpace([MarshalAs(UnmanagedType.LPTStr)]string rootPathName,
ref int sectorsPerCluster, ref int bytesPerSector, ref int numberOfFreeClusters, ref int totalNumbeOfClusters);
下面是具体代码:
/// &summary&
/// 获取指定路径的大小
/// &/summary&
/// &param name="dirPath"&路径&/param&
/// &returns&&/returns&
public static long GetDirectoryLength(string dirPath)
long len = 0;
//判断该路径是否存在(是否为文件夹)
if (!Directory.Exists(dirPath))
//查询文件的大小
len = FileSize(dirPath);
//定义一个DirectoryInfo对象
DirectoryInfo di = new DirectoryInfo(dirPath);
//通过GetFiles方法,获取di目录中的所有文件的大小
foreach (FileInfo fi in di.GetFiles())
len += fi.L
//获取di中所有的文件夹,并存到一个新的对象数组中,以进行递归
DirectoryInfo[] dis = di.GetDirectories();
if (dis.Length & 0)
for (int i = 0; i & dis.L i++)
len += GetDirectoryLength(dis[i].FullName);
/// &summary&
/// 获取指定路径的占用空间
/// &/summary&
/// &param name="dirPath"&路径&/param&
/// &returns&&/returns&
public static long GetDirectorySpace(string dirPath)
long len = 0;
//判断该路径是否存在(是否为文件夹)
if (!Directory.Exists(dirPath))
//如果是文件,则调用
len = FileSpace(dirPath);
//定义一个DirectoryInfo对象
DirectoryInfo di = new DirectoryInfo(dirPath);
//本机的簇值
long clusterSize = GetClusterSize(di);
//遍历目录下的文件,获取总占用空间
foreach (FileInfo fi in di.GetFiles())
//文件大小除以簇,余若不为0
if (fi.Length % clusterSize != 0)
decimal res = fi.Length / clusterS
//文件大小除以簇,取整数加1。为该文件占用簇的值
int clu = Convert.ToInt32(Math.Ceiling(res)) + 1;
long result = clusterSize *
//余若为0,则占用空间等于文件大小
len += fi.L
//获取di中所有的文件夹,并存到一个新的对象数组中,以进行递归
DirectoryInfo[] dis = di.GetDirectories();
if (dis.Length & 0)
for (int i = 0; i & dis.L i++)
len += GetDirectorySpace(dis[i].FullName);
//所给路径中所对应的文件大小
public static long FileSize(string filePath)
//定义一个FileInfo对象,是指与filePath所指向的文件相关联,以获取其大小
FileInfo fileInfo = new FileInfo(filePath);
return fileInfo.L
//所给路径中所对应的文件占用空间
public static long FileSpace(string filePath)
long temp = 0;
//定义一个FileInfo对象,是指与filePath所指向的文件相关联,以获取其大小
FileInfo fileInfo = new FileInfo(filePath);
long clusterSize = GetClusterSize(fileInfo);
if (fileInfo.Length % clusterSize != 0)
decimal res = fileInfo.Length / clusterS
int clu = Convert.ToInt32(Math.Ceiling(res)) + 1;
temp = clusterSize *
return fileInfo.L
public static DiskInfo GetDiskInfo(string rootPathName)
DiskInfo diskInfo = new DiskInfo();
int sectorsPerCluster = 0, bytesPerSector = 0, numberOfFreeClusters = 0, totalNumberOfClusters = 0;
GetDiskFreeSpace(rootPathName, ref sectorsPerCluster, ref bytesPerSector, ref numberOfFreeClusters, ref totalNumberOfClusters);
//每簇的扇区数
diskInfo.SectorsPerCluster = sectorsPerC
//每扇区字节
diskInfo.BytesPerSector = bytesPerS
return diskI
//// &summary&
/// 结构。硬盘信息
/// &/summary&
public struct DiskInfo
public string RootPathN
//每簇的扇区数
public int SectorsPerC
//每扇区字节
public int BytesPerS
public int NumberOfFreeC
public int TotalNumberOfC
/// &summary&
/// 获取每簇的字节
/// &/summary&
/// &param name="file"&指定文件&/param&
/// &returns&&/returns&
public static long GetClusterSize(FileInfo file)
long clusterSize = 0;
DiskInfo diskInfo = new DiskInfo();
diskInfo = GetDiskInfo(file.Directory.Root.FullName);
clusterSize = (diskInfo.BytesPerSector * diskInfo.SectorsPerCluster);
return clusterS
/// &summary&
/// 获取每簇的字节
/// &/summary&
/// &param name="dir"&指定目录&/param&
/// &returns&&/returns&
public static long GetClusterSize(DirectoryInfo dir)
long clusterSize = 0;
DiskInfo diskInfo = new DiskInfo();
diskInfo = GetDiskInfo(dir.Root.FullName);
clusterSize = (diskInfo.BytesPerSector * diskInfo.SectorsPerCluster);
return clusterS
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具为什么磁盘占用空间远远大于里面文件夹大小?_百度知道
为什么磁盘占用空间远远大于里面文件夹大小?
磁盘文件夹文件夹21MB磁盘占用空间显示却2G且没隐藏文件夹面
提问者采纳
1.能部缓存隐藏2.能部系统文件隐藏3.能部文件毒隐藏4.能部隐藏文件简单办磁盘文件拷至其磁盘存储并打校验否效效格式化原磁盘再文件拷;校验发现拷文件效或者能打赶紧杀毒吧
其他类似问题
为您推荐:
其他2条回答
、虚拟内存设置占用空间;二、磁盘碎片占用空间;三、用第三工具隐藏文件占用空间(显示所文件看);四、载工具没载完文件预先占用空间;五、收站没清空文件
应该有隐藏文件,你开启显示隐藏试试
占用空间的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁想知道文件大小和占用空间不一样,相差的比较大是为什么吗?请看小编为大家带来的详细说明,希望能帮助到大家。
说明内容:
我们先来看一个例子:
可以看出该文件的大小和占用空间相差很大!不要担心,这可不是病毒搞的鬼。这是千千静听的歌词文件夹。有兴趣的朋友可以亲自试一下,确实是这样。可为什么呢?接下来我来说明一下:
这里面关系到硬盘分区的一个概念:簇。这是硬盘上资料的最小存储单位空间。(字节那是计算单位,不一样。)
一个文件如果小于一个簇,那它还是要占用这个簇的,并且是占够整个簇的空间。如果大于一个簇,就会在硬盘上分散起来存放,这就是所谓的磁盘碎片了。
打个比方,一个分区就像一间大屋,一个簇就是像里面的一个个房间,房间里住的人就是我们存储的文件资料。分区越大,簇就越大,也就是屋里的房间分得越大,一个人住一间大房,会很浪费空间的。
例如在现在硬盘常用的文件系统Fat32情况下,50G的分区,一个簇就有32KB,如果你用存放歌词、记事本等小文件,会很浪费的。而本例中的用到的歌词文件就是.lrc文件,不过也就是几KB大小。
改进的办法,可以将分区划分得小一些,簇就会相应小一些。最好的办法是改用NTFS文件系统,可以自定义&簇&的大小。
如果我们把这些歌词文件全部作成一个压缩包,就会发现大小和占用空间差不多大了。如图:
注:想了解更多电脑教程请关注系统之家板块
版权声明:本站收录的文章及教程都是本站小编精心制作,仅供学习交流之用,如转载请注明出处。
(您的评论需要经过审核才能显示,请文明发言!)&&剩余字数:
点击图片更换
建议使用以上版本或、Firefox浏览器访问本站,获得更好的用户体验。文件大小为什么和占用空间不一样?_百度知道
文件大小为什么和占用空间不一样?
提问者采纳
  细朋友许都注意文件论存储硬盘空间其移存储空间文件本身要比所占用空间要;
  比说12KTxt文件
所占用空间
  文件其实文件内容实际具字节数Byte衡量单位要文件内容格式发变化文件发变化文件磁盘所占空间却Byte衡量单位计量单位簇(Cluster)
  簇  文件系统操作系统与驱器间接口操作系统请求硬盘读取文件请求相应文件系统(FAT 16/32/NTFS)打文件扇区磁盘物理存储单元由于操作系统数目众扇区进行寻址所操作系统相邻扇区组合起形簇再簇进行管理每簇包括2、4、8、16、32或64扇区显簇操作系统所使用逻辑概念非磁盘物理特性
  更管理磁盘空间更高效硬盘读取数据操作系统规定簇能放置文件内容文件所占用空间能簇整数倍;文件实际于簇要占簇空间所般情况文件所占空间要略于文件实际少数情况即文件实际恰簇整数倍文件实际才与所占空间完全致
  ②区格式与簇
  计算文件所占空间用公式:  簇数=取整(文件/簇)+1  所占空间=簇数×磁盘簇
  公式文件簇应Byte单位否则能产误差要KB单位字节数除1024即利用述计算公式计算ersave2.dat文件实际占用空间
  ③轻松查看簇  1、用Chkdsk查看簇
  Windows操作系统我使用Chkdsk命令查看硬盘区簇例我要Windows XP查看C盘簇单击始→运行键入CMD车再键入C:车输入Chkdsk车稍候片刻析结我C盘簇簇称配单元或者Allocation unit
  2、用PQ Magic等磁盘工具检测
  磁盘工具都具备磁盘信息显示等功能例PQ Magic选择要查看磁盘区单击右键选择高级→调整簇功能即显示框看该磁盘前设置簇
  手创建100字节文本文档
相关专业回答
  1、这是由于文件系统是采用簇作为文件存储的基本单位,每一个簇只能被1个文件占用;  2、簇的大小是硬盘分区在高级格式化时决定的,例如目前固态硬盘要求采用4k的簇大小;  3、举例说明:下图文件大小只有6个字节,当仍然需要占用1个簇的空间,下图也说明该分区采用了4KB的簇的大小。
其他类似问题
为您推荐:
占用空间的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁文件大小和占用的空间不一致怎么回事_百度知道
文件大小和占用的空间不一致怎么回事
文件的大小其实就是文件内容实际具有的字节数,它以Byte为衡量单位,只要文件内容和格式不发生变化,文件大小就不会发生变化。但文件在磁盘上的所占空间却不是以Byte为衡量单位的,它最小的计量单位是“簇(Cluster)”。
操作系统规定一个簇中只能放置一个文件的内容,因此文件所占用的空间,只能是簇的整数倍;而如果文件实际大小小于一簇,它也要占一簇的空间。所以,一般情况下文件所占空间要略大于文件的实际大小,只有在少数情况下,即文件的实际大小恰好是簇的整数倍时,文件的实际大小才会与所占空间完全一致。
其他类似问题
为您推荐:
情况文件占内存都要比原文件些电脑运行需要空间塞满撑死
是电脑的么?把有用的文件挪开格式化就可以了,具体什么愿意我也不知道,我电脑也有这问题,都是这样处理的。
文件大小的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 随机io 顺序io 的文章

 

随机推荐