云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > C#获取文件夹文件的大小以及占用空间

C#获取文件夹文件的大小以及占用空间

  • 62 次阅读
  • 3 次下载
  • 2025/5/24 3:21:35

//调用windows API获取磁盘空闲空间

//导入库

[DllImport(\

static extern bool GetDiskFreeSpace([MarshalAs(UnmanagedType.LPTStr)]string rootPathName,

ref int sectorsPerCluster, ref int bytesPerSector,

ref int numberOfFreeClusters, ref int totalNumbeOfClusters); ///

/// 获取指定路径的大小 ///

///

///

public static long GetDirectoryLength(string dirPath) {

long len = 0;

//判断该路径是否存在(是否为文件夹) if (!Directory.Exists(dirPath)) {

//查询文件的大小

len = FileSize(dirPath);

}

else {

//定义一个DirectoryInfo对象

DirectoryInfo di = new DirectoryInfo(dirPath);

//通过GetFiles方法,获取di目录中的所有文件的大小 foreach (FileInfo fi in di.GetFiles()) {

len += fi.Length;

}

//获取di中所有的文件夹,并存到一个新的对象数组中,以进行递归 DirectoryInfo[] dis = di.GetDirectories(); if (dis.Length > 0) {

for (int i = 0; i < dis.Length; i++) {

len += GetDirectoryLength(dis[i].FullName);

}

} }

return len; }

///

/// 获取指定路径的占用空间 ///

/// ///

public static long GetDirectorySpace(string dirPath) {

//返回值

long len = 0;

//判断该路径是否存在(是否为文件夹) if (!Directory.Exists(dirPath)) {

//如果是文件,则调用

len = FileSpace(dirPath); }

else {

//定义一个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 / clusterSize;

//文件大小除以簇,取整数加1。为该文件占用簇的值 int clu = Convert.ToInt32(Math.Ceiling(res)) + 1; long result = clusterSize * clu; len += result; }

else

{

//余若为0,则占用空间等于文件大小 len += fi.Length; } }

//获取di中所有的文件夹,并存到一个新的对象数组中,以进行递归 DirectoryInfo[] dis = di.GetDirectories(); if (dis.Length > 0) {

for (int i = 0; i < dis.Length; i++)

{

len += GetDirectorySpace(dis[i].FullName); } } }

return len; }

//所给路径中所对应的文件大小

public static long FileSize(string filePath)

{

//定义一个FileInfo对象,是指与filePath所指向的文件相关联,以获取其大小

FileInfo fileInfo = new FileInfo(filePath); return fileInfo.Length; }

//所给路径中所对应的文件占用空间

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 / clusterSize;

int clu = Convert.ToInt32(Math.Ceiling(res)) + 1; temp = clusterSize * clu; }

else {

return fileInfo.Length; }

return temp; }

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 = sectorsPerCluster; //每扇区字节

diskInfo.BytesPerSector = bytesPerSector;

return diskInfo; }

////

/// 结构。硬盘信息 ///

public struct DiskInfo {

public string RootPathName; //每簇的扇区数

public int SectorsPerCluster; //每扇区字节

public int BytesPerSector;

public int NumberOfFreeClusters; public int TotalNumberOfClusters; }

///

/// 获取每簇的字节 ///

/// ///

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 clusterSize; }

///

/// 获取每簇的字节 ///

/// ///

public static long GetClusterSize(DirectoryInfo dir) {

long clusterSize = 0;

DiskInfo diskInfo = new DiskInfo();

diskInfo = GetDiskInfo(dir.Root.FullName); clusterSize = (diskInfo.BytesPerSector * diskInfo.SectorsPerCluster); return clusterSize; }

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

//调用windows API获取磁盘空闲空间 //导入库 [DllImport(\ static extern bool GetDiskFreeSpace([MarshalAs(UnmanagedType.LPTStr)]string rootPathName, ref int sectorsPerCluster, ref int bytesPerSector, ref int numberOfFreeClusters, ref int totalNumbeOfClusters); /// /// 获取指定路径的大小 /// ///

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com