在VC中使用FileSystemObject

王朝vc·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

今天在论坛里遇到这样一个问题,如果不用递归的方式得到一个文件夹的大小?

第一反应就是使用FSO可以通过folder.size属性得到,终于在网上找到

How to use scrrun.dll in VisualC++?

http://www.xtremevbtalk.com/archive/index.php/t-230203.html

虽然并未完成,但基本框架已经出来

使用方法大致如下

1.通过OLEView得到idl,并作相应修改

2.通过midl得到头文件

3.include该头文件通过CoCreateInstance调用

添加代码如下:

#include "scrrun.h"

#define SAFE_RELEASE(o) if(o){o->Release();o=NULL;}

int GetFolderSize(BSTR FolderPath)

{

IFileSystem *FileSystem=NULL;

IFolder *Folder=NULL;

LONG nRet = -1;

HRESULT hr;

hr = CoCreateInstance(CLSID_FileSystemObject,NULL,CLSCTX_INPROC_SERVER,IID_IFileSystem, (void**) &FileSystem);

if(FAILED(hr))goto quit;

hr = FileSystem->GetFolder(FolderPath,&Folder);

if(FAILED(hr))goto quit;

if(Folder)

{

VARIANT vt={0};

Folder->get_Size(&vt);

nRet = vt.lVal;

}

quit:

SAFE_RELEASE(Folder);

SAFE_RELEASE(FileSystem);

return nRet;

}

调用方法

GetFolderSize(L"c:\\windows\\system32");

参考文献

Calling Visual Basic ActiveX DLLs from Visual C++

http://www.codeproject.com/com/vb_from_vc.asp

Component Object Model API

http://www.catalyst.com/support/help/internetmail/index.html?page=html%2Fmail%2Fguide%2Fobjectmodel.html

注:该函数暂不适宜超过2G的文件夹,但理论上应该可以

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航