获取远程目录的文件夹大小
本文关键字:文件夹 程目录 获取 | 更新日期: 2023-09-27 18:14:12
要求:在合理的时间范围内获得文件夹或远程计算机的大小。
WMI枚举目录然后计算其内容的大小花费的时间太长了。
我尝试了下面的代码,但是它说这不是一个有效的路径
String Folder = Row["Location"].ToString();
String[] Files = Directory.GetFiles(@"''" + Folder.Remove(0, 2) + @"'c$" + Folder, "*", SearchOption.AllDirectories);
long TotalFolderSize = 0;
foreach (String File in Files)
{
TotalFolderSize += new FileInfo(File).Length;
}
我不太擅长PInvoke
,对c#还是很新的。我看到Kernel32.dll
有一些对文件和磁盘的调用,但找不到任何关于文件夹或目录的信息。
所以问题是
c#中是否有API/函数可以通过网络获取目录的大小
是否有一个PInvoke调用可以用来做这个
最好的方法是什么?
使用Directory
和FileInfo
类
代码示例和更多信息可以在这里找到:
static long GetDirectorySize(string p)
{
// 1.
// Get array of all file names.
string[] a = Directory.GetFiles(p, "*", SearchOption.AllDirectories);
// 2.
// Calculate total bytes of all files in a loop.
long b = 0;
foreach (string name in a)
{
// 3.
// Use FileInfo to get length of each file.
FileInfo info = new FileInfo(name);
b += info.Length;
}
// 4.
// Return total size
return b;
}
对于网络共享,您的方法是正确的,因为您无法通过任何"更快"的方法访问底层文件系统。但是您的代码有一些问题,下面显示了基本问题:
string networkPath = @"''sgb8532fh92'AppData'PCUWEB";
DirectoryInfo di = new DirectoryInfo(networkPath);
long totalSize = 0;
foreach (FileInfo fi in di.GetFiles())
{
totalSize += fi.Length;
}
Console.WriteLine("Total Size: {0}Mb", totalSize / 1024 / 1024);
Console.ReadLine();
还要注意,这将只返回文件夹中文件的大小,而不是任何子文件夹。对于这一点,我想看看递归。