相关疑难解决方法(0)

目录文件大小计算 - 如何使其更快?

使用C#,我找到了目录的总大小.逻辑是这样的:获取文件夹中的文件.总结总大小.查找是否有子目录.然后进行递归搜索.

我也尝试了另一种方法:使用FSO(obj.GetFolder(path).Size).这两种方法的时间差别不大.

现在的问题是,我在一个特定的文件夹中有成千上万的文件,它至少需要2分钟才能找到文件夹大小.此外,如果我再次运行程序,它会很快发生(5秒).我认为窗口正在缓存文件大小.

有什么方法可以减少我第一次运行程序时所花的时间吗?

c# windows winapi filesystemobject winforms

19
推荐指数
3
解决办法
2万
查看次数

在VB .NET中计算目录大小的最佳方法是什么?

我需要在VB .Net中计算目录大小

我知道以下两种方法

方法1:来自MSDN http://msdn.microsoft.com/en-us/library/system.io.directory.aspx

'以下示例计算目录'及其子目录的大小(如果有),并以字节为单位显示总大小.

Imports System
Imports System.IO

Public Class ShowDirSize

Public Shared Function DirSize(ByVal d As DirectoryInfo) As Long
    Dim Size As Long = 0
    ' Add file sizes.
    Dim fis As FileInfo() = d.GetFiles()
    Dim fi As FileInfo
    For Each fi In fis
        Size += fi.Length
    Next fi
    ' Add subdirectory sizes.
    Dim dis As DirectoryInfo() = d.GetDirectories()
    Dim di As DirectoryInfo
    For Each di In dis
        Size += DirSize(di)
    Next di
    Return Size
End Function …
Run Code Online (Sandbox Code Playgroud)

vb.net directory size

7
推荐指数
2
解决办法
1万
查看次数

计算目录大小

我正在尝试以分割负载的方式计算目录大小,以便用户可以看到计数进度.我认为这样做的逻辑方法是首先创建目录树,然后执行计算所有文件长度的操作.

我意想不到的事情是,大部分时间(磁盘I/O)来自创建目录树,然后FileInfo[]几乎立即几乎没有磁盘I/O.

我尝试过这两种方法Directory.GetDirectories(),只需创建一个目录名字符串树,并使用一个DirectoryInfo对象,这两种方法仍然需要大量的I/O时间(当然是读取MFT),而不是全部FileInfo.Length用于每个目录中的文件.

我想没有办法减少I/O使树显着,我想我只是想知道为什么这个操作比翻阅更多的文件需要更多的时间?

此外,如果任何人都可以推荐一种非递归的方式来计算一些东西(因为看起来我需要分开枚举并平衡它以使大小统计更具响应性).为基础上的每个子目录创建一个线程并让调度程序竞争平衡可能不会很好,是吗?

编辑: 此代码的存储库

.net c# windows filesystems

7
推荐指数
1
解决办法
416
查看次数

我们有没有理由在Directory.EnumerateFiles()上使用Directory.GetFiles()?

我不知道为什么我们会使用它Directory.GetFiles,如果Directory.EnumerateFiles能够做同样的事情,你甚至可以在返回找到的整个目录列表之前枚举列表.

Directory.EnumerateFiles与Directory.GetFiles有什么区别?

为什么,现在EnumerateFiles有可能需要使用GetFiles

c#

6
推荐指数
2
解决办法
5876
查看次数

在 Windows 中查找文件夹的实际大小

在我的 Windows 计算机家庭桌面上,我右键单击属性下的 C:\Windows 文件夹,它显示:

在此处输入图片说明

如果我使用Microsoft sysinternals提供的du工具

du C:\Windows
Run Code Online (Sandbox Code Playgroud)

这产生

Files:        77060
Directories:  21838
Size:         31,070,596,369 bytes
Size on disk: 31,151,837,184 bytes
Run Code Online (Sandbox Code Playgroud)

如果我以管理员身份运行相同的命令

Files:        77894
Directories:  22220
Size:         32,223,507,961 bytes
Size on disk: 32,297,160,704 bytes
Run Code Online (Sandbox Code Playgroud)

以管理员身份运行 Powershell ISE 后,我从这个SO 答案中运行了以下 powershell 片段

"{0:N2}" -f ((Get-ChildItem -path C:\InsertPathHere -recurse | Measure-Object -property length -sum ).sum /1MB) + " MB"
Run Code Online (Sandbox Code Playgroud)

哪个输出

22,486.11 MB
Run Code Online (Sandbox Code Playgroud)

以管理员身份运行的命令提示符中的以下SO 答案中的 C# 代码返回:

35,163,662,628 bytes
Run Code Online (Sandbox Code Playgroud)

尽管关闭它仍然显示与 Windows 资源管理器不同。因此,这些方法都没有返回目录的实际大小。所以我的问题是这个。

是否有脚本或编码方法可以返回 C:\Windows …

windows filesystems directory

6
推荐指数
1
解决办法
2104
查看次数

如何忽略"拒绝访问路径"/ C#中的UnauthorizedAccess异常?

如何绕过/忽略 "拒绝访问路径"/ UnauthorizedAccess异常

继续在此方法中收集文件名;

public static string[] GetFilesAndFoldersCMethod(string path)
{
   string[] filenames = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories).Select(Path.GetFullPath).ToArray();
   return filenames;
}
Run Code Online (Sandbox Code Playgroud)

//打电话......

foreach (var s in GetFilesAndFoldersCMethod(@"C:/"))
{
    Console.WriteLine(s);
}
Run Code Online (Sandbox Code Playgroud)

我的应用程序在GetFilesAndFoldersCMethod的第一行停止,一个异常说; "拒绝访问路径'C:\ @ Logs \'." 请帮我...

谢谢,

c# windows file-io try-catch

1
推荐指数
1
解决办法
1万
查看次数