- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
为了计算可能非常大的文件夹的大小,我使用了 FileSystemObject.Size
:
#! perl
use strict;
use warnings;
use 5.10.0;
use File::Spec;
use Win32::OLE;
my $_fso;
sub folder_size {
my($folder) = @_;
$_fso = Win32::OLE->new("Scripting.FileSystemObject")
unless defined $_fso;
die "GetFolder $folder: $^E"
unless defined(my $f = $_fso->GetFolder($folder));
my $size = $f->Size;
die "Size $folder: $^E" unless defined $size;
$size;
}
对于某些情况,folder_size
正常返回,但对于其他情况,对 Size
的调用会抛出异常。计算 C:\
中文件夹的大小
my $root = "C:/";
opendir my $dh, $root or die "$0: opendir: $!";
while (defined(my $name = readdir $dh)) {
next if $name eq "." || $name eq "..";
my $folder = File::Spec->catdir($root, $name);
next unless -d $folder;
chomp(my $size = eval { folder_size $folder } // $@);
print "$folder - $size\n";
}
我得到以下输出:
C:\$Recycle.Bin - Size C:\$Recycle.Bin: The resource loader failed to find MUI file at olesize line 22.C:\boot - 17463020C:\cygwin - 1835711453C:\DELL - 133184282C:\doctemp - 12811140C:\Documents and Settings - Size C:\Documents and Settings: The resource loader cache doesn't have loaded MUI entry at olesize line 22.C:\Drivers - 180746384C:\eclipse - 324690795C:\EFI - 262144C:\found.000 - Size C:\found.000: The resource loader cache doesn't have loaded MUI entry at olesize line 22.C:\ghc - 1014658071C:\gtk2hs - 138050118C:\PerfLogs - Size C:\PerfLogs: The resource loader cache doesn't have loaded MUI entry at olesize line 22.C:\Perl - 115648300C:\Program Files - Size C:\Program Files: The resource loader cache doesn't have loaded MUI entry at olesize line 22.C:\ProgramData - Size C:\ProgramData: The resource loader cache doesn't have loaded MUI entry at olesize line 22.C:\Python25 - 83902423C:\System Volume Information - Size C:\System Volume Information: The resource loader cache doesn't have loaded MUI entry at olesize line 22.C:\Users - Size C:\Users: The resource loader cache doesn't have loaded MUI entry at olesize line 22.C:\Virtual Machines - 5401825804C:\Windows - Size C:\Windows: The resource loader cache doesn't have loaded MUI entry at olesize line 22.C:\xampp - 408475320
这似乎至少部分是权限问题,因为以管理员身份运行代码会更改某些输出(以粗体显示)。
C:\$Recycle.Bin - 2062958143C:\boot - 17463020C:\cygwin - 1835711453C:\DELL - 133184282C:\doctemp - 12811140C:\Documents and Settings - Size C:\Documents and Settings: The resource loader failed to find MUI file at olesize line 22.C:\Drivers - 180746384C:\eclipse - 324690795C:\EFI - 262144C:\found.000 - 8950C:\ghc - 1014658071C:\gtk2hs - 138050118C:\PerfLogs - 0C:\Perl - 115648300C:\Program Files - 10857194364C:\ProgramData - Size C:\ProgramData: The resource loader cache doesn't have loaded MUI entry at olesize line 22.C:\Python25 - 83902423C:\System Volume Information - Size C:\System Volume Information: The resource loader cache doesn't have loaded MUI entry at olesize line 22.C:\Users - Size C:\Users: The resource loader cache doesn't have loaded MUI entry at olesize line 22.C:\Virtual Machines - 5401825804C:\Windows - Size C:\Windows: The resource loader cache doesn't have loaded MUI entry at olesize line 22.C:\xampp - 408475320
MUI 错误信息对应ERROR_MUI_FILE_NOT_FOUND
.
我的代码为什么不正确?
对于上下文,我不需要使用 FileSystemObject
。我考虑的其他方法是抓取 dir/s
的输出并对子树中所有叶子的大小求和。对于大型目录,dir/s
的输出可能会非常大,搜索整个子树是一种性能狗。 Windows 资源管理器似乎总是能够在给定足够时间的情况下计算出结果,那么有没有办法调用它正在做的事情?
最佳答案
另一种选择是坚持使用纯 perl:Filesys::DiskUsage做同样的事情。但是,我敢打赌许可问题仍然存在。它至少应该比抓取 dir/s
的输出更好。
老实说,如果 Explorer 在您未以管理员身份登录时在这些目录上工作,这对我来说似乎是 Explorer 中的权限升级问题 - 显然,Explorer 可以像管理员一样访问文件系统,即使在它不是这样登录的,所以如果您可以让资源管理器加载您自己的 DLL,您也可以拥有管理员访问权限。
关于windows - 如何使用 FileSystemObject.Size 可靠地确定文件夹大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5764895/
如果这已在其他地方得到回答,我们深表歉意。我很难理解其他论坛帖子上糟糕的书面英语,我真的很想了解发生了什么。 这段代码很好用。 dim FileSys, source, destination, WS
我刚刚经历过这样的时刻之一,你走出杂草,检查你的代码并问自己“我为什么要那样做?” 我有一个脚本,它使用 FileSystemObject 创建一个包含多个子文件夹和文件的文件夹。一切正常,但我想我一
在本节描述的示例代码,提供真实的例子来示范在 FileSystemObject 对象模式中可用的许多功能。该代码显示了如何一起使用对象模式的所有功能,以及如何在您自己的代码中有效
在 VBScript 中,我想获取按创建日期排序的文件夹中的文件列表。我看到为了做到这一点,我需要使用记录集(对我来说似乎有点矫枉过正)或自己对集合进行排序(我想我可以避免它并且我希望我的代码更短)。
下面是用于打开文件并将所需数据粘贴到这些文件中并在完成工作后关闭这些文件的代码。当我运行这段代码时,没有文件在打开和 Run-time error-13 : Type mismatch 正在抛出这行代
不知道为什么,但下面的代码已经开始抛出一个未知错误。当宏运行时,Excel 停止响应。 为什么会出现这个错误? 具有相同功能的替代路线是什么? 此代码位于 Windows 7 计算机上的 Excel
我创建了一个 Do While 循环来循环使用 .jpg 的文件扩展,以便使用这样的代码发现第一个 fn = Dir(sPath & "*.jpg") Do While fn <> "" sF
我正在尝试编写一个宏来自动将 csv 文件导入我的工作簿。但是我遇到了解析分隔符的问题,特别是文件系统对象的 readline 方法在调用时没有读取完整的行 例子 csv中的一行: 1,2,jac
我有几个使用 FileSystemObject 的过程。我觉得挺方便的。 问题:将 FileSystemObject 的现有实例作为参数从“主”过程传递到这些其他过程,而不是让每个过程创建自己的 Fi
我编写了一个小程序来检查驱动器是否可用等。当我在另一台计算机上安装它时,Avira Antivirus 弹出木马警告。我将有问题的代码行缩小为: 20 Set fso = CreateO
有没有我可以使用的函数将不可靠的文件名转换为好的文件名? 我正在处理大量照片,偶尔,我的脚本会停止,因为上传者在文件名中加入了 curl 符号 (~)。我现在还想知道是否还有其他不能出现在文件名中的错
我有 Excel-2007。我正在使用文件系统对象 VBA 代码列出目录中的文件。我还在 Excel 中设置了对 Microsoft Scriptlet 库的引用。我得到: 编译器错误:用户定义类型未
如果一个文件夹中只有一个文件,我是否可以在不知道知道其名称或遍历文件夹中的文件的情况下将其取出? (代码是 VBS,但它可以是任何东西,FSO 是这里有趣的部分。) 这对我不起作用: dim fso
我想使用以下代码创建一个目录和一个子目录: Public fso As Scripting.FileSystemObject Set fso = New Scripting.FileSystemObj
是的,我仍在使用经典 ASP。 我将要编写一个脚本,每 5 分钟检查一次服务器上的目录,检查我的办公室是否有新上传的照片,并将照片传输到另一个位置。我使用 ASP 和 FileSystemObject
所以在我的程序中,我使用 COM Auotmation(Silverlight 4 中的 AutomationFactory)创建一个 FileSystemObject,我向其写入一个字符串 (the
我已经在网络驱动器上创建了一个文件作为脚本的一部分,并且我试图将其隐藏,这样如果再次运行脚本,它应该能够看到该文件并根据其中包含的信息进行操作,但是我在做这件事时遇到了麻烦。到目前为止我所拥有的是:
我需要访问文件信息,例如文件大小。 我可以创建 ActiveXObject: ActiveXObject fileSystem = new ActiveXObject("Scripting.FileS
FileSystemObject 对象 提供对计算机文件系统的访问。 说明 以下代码举例说明如何使用 FileSystemObject 对象返回一个 TextStream 对象,此对象可以被读
在源文件夹中有 3 个文件: a.csv b.csv a.csv_backup 我希望 *.csv 只复制 a.csv 和 b.csv,但它复制了 a.csv_backup 也是。 代码: Dim o
我是一名优秀的程序员,十分优秀!