65.9K
CodeProject 正在变化。 阅读更多。
Home

C++ 包装器和 Windows FileSystemObject 对象扩展

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.94/5 (7投票s)

2006年2月21日

CPOL

2分钟阅读

viewsIcon

76597

downloadIcon

755

这是一个 Windows 文件系统对象的 C++ 实现。它包装并扩展了标准文件系统对象接口(方法/属性)。现在,C++ 开发者可以在无需编写自己的 Win32 API 代码的情况下操作文件夹和文件。他们可以利用经过充分测试的 Windows 文件系统对象。

引言

Windows 自带一个 FileSystemObject 系统,它提供了易于使用的文件夹/文件操作接口。不幸的是,只有基于脚本语言的开发者才能利用它。CFileSystemObject 是 Windows FileSystemObject 的 C++ 实现。它将标准接口(方法/属性)封装在 C++ 类中。C++ 开发者可以轻松地使用它来与 Windows 文件夹和文件交互,而无需处理 Win32 API(及其复杂的参数)。此外,我还进一步扩展了最终的 C++ 类,以支持二进制文件操作。大多数开发者可以使用这些 C++ 类完成 90% 的文件夹/文件相关编码工作。

文件系统对象类概览

类名

描述

CFsoFileSystemObject FileSystemObject 接口的包装器;用于获取其他对象接口。
CFsoDrive Drive 接口的包装器;用于操作驱动器(例如,c:\)。
CFsoFolder Folder 接口的包装器;用于操作文件夹(例如,c:\windows)。
CFsoFile File 接口的包装器;用于操作文件(例如,c:\windows\xxx.dll)。
CFsoTextStream TextStream 接口的包装器;用于读取/写入/追加文本文件(支持 ASCII 和 Unicode)。
CFsoBinaryStream 接口扩展,用于支持二进制文件操作;用于读取/写入/追加二进制文件。

如何使用它们?

  1. 您需要获取 FileSystemObject 的一个实例。
  2. CFileSystemObject * fso = new CFileSystemObject();
  3. 获取实例后,您可以使用它来访问其他接口并使用公开的方法/属性。
    1. 驱动
    2. CFsoDrive * driveC = fso->GetDrive(L"c:\\");
    3. 文件夹
    4. CFsoFolder * folderWinRoot = fso->GetFolder(L"c:\\windows");
    5. 文件
    6. CFsoFile * fileText = fso->GetFile(L"c:\\windows\\abc.txt");
      CFsoFile * fileBinary = fso->GetFile(L"c:\\windows\\abc.bin");
    7. 打开文本流(使用步骤 3 获取的文本文件对象)
    8. CFsoTextStream * textStream = 
        fileText->OpenAsTextStream(1/*IO Mode*/, 0/*Text Format*/);
    9. 打开二进制流(使用步骤 3 获取的二进制文件对象)
    10. CFsoBinaryStream * binaryStream = fileBinary->OpenAsBinaryStream(1/*IO Mode*/);
    11. 枚举指定文件夹下的所有子文件夹(使用步骤 2 获取的文件夹对象)
    12. CFsoList<CFsoFolder> * subFolders = folderWinRoot->GetSubFolders();
      for (int i = 0; i < subFolders->GetCount(); i++)
      {
          CFsoFolder * folder = subFolders->Get(i);
          ...
          ...
          ...
      }
      subFolders->Clear(true);
      // Clear all folder objects in the list and release memory occupied
    13. 枚举指定文件夹下的所有文件(使用步骤 2 获取的文件夹对象)
    14. CFsoList<CFsoFile> * files = folderWinRoot->GetFiles();
      for (int i = 0; i < files->GetCount(); i++)
      {
          CFsoFile * file = files->Get(i);
          ...
          ...
          ...
      }
      files->Clear(true);
      // Clear all file objects in the list and release memory occupied

End

  • 为了帮助您理解这些类、方法、枚举和 typedef,我已经在源代码中编写了具体的注释,并使用 Doxygen 生成了 HTML 文档。您可以轻松找到您需要的信息来使用这些类。解压缩下载的源代码文件后,您会找到一个 .CPP 文件、一个 .H 文件,以及一个名为 HTML 的文件夹。请打开该文件夹并双击 index.html 以打开源代码文档。尽情享受吧!
  • 请确保 scrrun.dll 的文件路径根据您的 Windows 系统设置正确。在我的 PC 上,默认 Windows 根路径是 C:\Winnt。您的系统可能并非如此。如果您的系统根路径是 C:\Windows,请相应地更改 CFileSystemObject.h 中的第 25 行。否则,将发生编译错误。
© . All rights reserved.