搜索
查看: 2987|回复: 5

如何返回目录大小

[复制链接]

10

主题

50

帖子

552

积分

三级会员

Rank: 4

积分
552
发表于 2013-5-7 16:18:41 | 显示全部楼层 |阅读模式
  1. import fsys.file;
  2. import fsys;
  3. import win;

  4. file = fsys.file("c:\DrvS3");
  5. size = file.size();
  6. win.msgbox(size+"byte");
复制代码
上述代码不能返回目录大小 ,用于文件可以
回复

使用道具 举报

9

主题

204

帖子

1301

积分

四级会员

Rank: 6Rank: 6

积分
1301
发表于 2013-5-7 16:57:15 | 显示全部楼层

好像没有这种直接获取文件夹大小的函数,不过你可以把这个文件夹下的所有文件遍历一遍,就可以获取整个文件夹的大小了 使用FindFirstFile()与Fin

好像没有这种直接获取文件夹大小的函数,不过你可以把这个文件夹下的所有文件遍历一遍,就可以获取整个文件夹的大小了

使用FindFirstFile()与FindNextFile()这两个函数即可以实现

使用FindFirstFile()函数时有个WIN32_FIND_DATA结构体,这个结构体里面就包含了文件的大小

typedef struct _WIN32_FIND_DATA {
  DWORD dwFileAttributes;
  FILETIME ftCreationTime;
  FILETIME ftLastAccessTime;
  FILETIME ftLastWriteTime;
  DWORD nFileSizeHigh;
  DWORD nFileSizeLow;
  DWORD dwOID;
  TCHAR cFileName[MAX_PATH];
} WIN32_FIND_DATA;

至于参数是啥意思,就到MSDN上面去找吧


搜索的

点评

遍历文件用 fsys.enum() 很方便  发表于 2013-5-7 17:42
回复

使用道具 举报

10

主题

50

帖子

552

积分

三级会员

Rank: 4

积分
552
 楼主| 发表于 2013-5-7 17:02:26 | 显示全部楼层

[i=s] 本帖最后由 风行者 于 2013-5-7 17:03 编辑 [/i] 多谢楼上的回复,暂时使用文件对象方法实现比较方便 还是希望以后有函数可以

本帖最后由 风行者 于 2013-5-7 17:03 编辑

多谢楼上的回复,暂时使用文件对象方法实现比较方便
还是希望以后有函数可以实现的。
  1. import win;
  2. import com;
  3. file = com.CreateObject("Scripting.FileSystemObject");
  4. win.msgbox((file.GetFolder("c:\DrvS3").size /1024 /1024) + 'MB');
复制代码
回复

使用道具 举报

9

主题

462

帖子

2551

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2551
发表于 2013-5-7 17:18:22 | 显示全部楼层

[quote][size=2][color=#999999]风行者 发表于 2013-5-7 17:02[/color] [url=forum.php?mod=

风行者 发表于 2013-5-7 17:02
多谢楼上的回复,暂时使用文件对象方法实现比较方便
还是希望以后有函数可以实现的。

你希望怎么样实现呢?! 毕竟他叫 fsys.file 不叫 fsys.dir 不提供一些并不必需的函数也正常,即使是WINAPI也没有这样的函数, 你在windows资源管理器中可以看到目录是不显示大小的,属性中的目录大小是实时循环计算出来的。

不过可以自己扩展标准库的函数,自己动手丰衣足食。
  1. import fsys;
  2. import fsys.file;

  3. namespace fsys.file{
  4.         getFolderSize = function(dir){
  5.                 var size,sizeHigh = 0,0;
  6.                 ..fsys.enum( dir, "*.*",
  7.                         function(dir,filename,fullpath,findData){
  8.                                 if(filename){
  9.                            var hFile = CreateFile(fullpath, 0x80000000,3,{} ,0x3,0);
  10.                            var low,high = GetFileSize(hFile,0)
  11.                            ..raw.closehandle(hFile)
  12.                           
  13.                            size += low;
  14.                            sizeHigh += high;
  15.                                 }
  16.                         }  
  17.                 );
  18.                
  19.                 return ..fsys.formatSize(size,sizeHigh)
  20.         }
  21. }

  22. io.open()
  23. io.print("正在计算目录大小")
  24. io.print( fsys.file.getFolderSize("~") )
复制代码
回复

使用道具 举报

10

主题

50

帖子

552

积分

三级会员

Rank: 4

积分
552
 楼主| 发表于 2013-5-7 17:30:13 | 显示全部楼层

[quote][size=2][color=#999999]roger 发表于 2013-5-7 17:18[/color] [url=forum.php?mo

roger 发表于 2013-5-7 17:18
你希望怎么样实现呢?! 毕竟他叫 fsys.file 不叫 fsys.dir 不提供一些并不必需的函数也正常,即使是WINA ...

fsys 有对目录操作,如move,copy
api是没有目录大小函数,自己写个是很好的选择了
谢谢楼上代码,研究一下
回复

使用道具 举报

0

主题

21

帖子

119

积分

一级会员

Rank: 2

积分
119
发表于 2017-5-30 18:07:03 | 显示全部楼层
roger 发表于 2013-5-7 17:18
你希望怎么样实现呢?! 毕竟他叫 fsys.file 不叫 fsys.dir 不提供一些并不必需的函数也正常,即使是WINA ...

这是个不错的选择
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-10-20 04:53 , Processed in 0.062500 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表