关于文件及文件夹遍历的实现,这个话题对很多朋友来说早已经不是什么新鲜事,特别是Google/百度一下,相关资源更是多如牛毛。然而,笔者今天还是不厌其烦地重拾这个话题,究其主要原因是,这个话题对笔者而言却是相对新鲜的事情。因此,笔者花了一个晚上的功夫去编写这么一个有关于文件及文件夹扫描的小程序,当然这是针对Windows操作系统而言的。
首先,这个小程序包含两种语言实现,分别是C++和C#。使用C++编写,是因为最近笔者的工作中需要完成一个针对特定应用的文件扫描模块(需要使用C++实现),这可以进行预热。使用C#编写,是因为笔者希望能够进一步加深对C#相关知识的理解和掌握。
言归正传,不管是使用C++实现还是使用C#实现,在本程序中的设计思路都是一样的。在C++中,笔者通过CFileScanner类来实现SearchFiles和SearchFolders的功能,在C#中,笔者通过FileScanner类来实现SearchFiles和SearchFolders的功能。下面是这两个不同语言的类的主要方法:
C++中的CFileScanner类:
// Initialize the search options, must be called before calling // 'SearchFiles' or 'SearchFolders' method. // // Parameters: // [in]CString szSearchPatterns: The search patterns for file search. // [in]BOOL bSearchingInSubDir: The flag of searching in sub directory. // void InitSearchOptions(CString szSearchPatterns, BOOL bSearchingInSubDir); // Search files in the search directory. // Note: If the flag of 'm_bIsSeachingInSubDir' is true, then this method // will be called recursively. // // Parameters: // [in]CString szSearchDir: The search directory. // void SearchFiles(CString szSearchDir); // Search folders in the search directory. // Note: If the flag of 'm_bIsSeachingInSubDir' is true, then this method // will be called recursively. // // Parameters: // [in]CString szSearchDir: The search directory. // void SearchFolders(CString szSearchDir); // Get the searched file list. // // Parameters: // [out]CStringArray& fileList: The file list. // void GetSearchFileList(CStringArray& fileList); // Get the searched folder list. // // Parameters: // [out]CStringArray& folderList: The folder list. // void GetSearchFolderList(CStringArray& folderList); // Determines whether the name is matched one or more search patterns. // // Parameters: // [in]CString szName: A string to compare to search pattern(s). // // Return: // True if at least one search string matches file name, false otherwise. // BOOL IsMatchedSearchPatterns(CString szName); // Generate the wildcard with the directory. // // Parameters: // [in]CString szDir: The directory. // // Return: // The wildcard string. // CString GenerateWildcard(CString szDir); // Split the string to string array. // // Parameters: // [in]CString szSource: The source string that want to be split. // [out]CStringArray& destArray: The destination array that stores the split string. // [in]char chDivision: The division that used to division the string. // void DecodeCString(CString szSource, CStringArray& destArray, char chDivision);
C#中的FileScanner类:
/// <summary> /// Inits the search options, must be called before calling /// 'SearchFiles' or 'SearchFolders' method. /// </summary> /// <param name="searchPatterns">The search patterns.</param> /// <param name="isSearchingInSubDir">if set to <c>true</c> [is searching in sub dir].</param> public void InitSearchOptions(string searchPatterns, bool isSearchingInSubDir) /// <summary> /// Searches the files. /// </summary> /// <param name="searchDir">The search directory.</param> public void SearchFiles(string searchDir) /// <summary> /// Searches the folders. /// </summary> /// <param name="searchDir">The search directory.</param> public void SearchFolders(string searchDir) /// <summary> /// Determines whether [is matched search patterns] [the specified name]. /// </summary> /// <param name="name">The name.</param> /// <returns> /// <c>true</c> if [is matched search patterns] [the specified name]; otherwise, <c>false</c>. /// </returns> private bool IsMatchedSearchPatterns(string name)
下面是分别使用C#和C++文件扫描小程序扫描文件及文件夹的结果截图:
本程序在VS2008环境下编译通过,其可以从以下地址获得:http://download.csdn.net/source/2637608。