すべてのドライブを検索してすべてのドライブを検索する小さなコードがありますが、私の問題は除外しますWindowsシステムドライブのフォルダですが、検索ファイル内のwindowsフォルダを除外
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <strsafe.h>
#include "Shlwapi.h"
#pragma comment(lib, "User32.lib")
#pragma comment(lib, "shlwapi.lib")
void FindFilesRecursively(LPCTSTR lpFolder, LPCTSTR lpFilePattern)
{
TCHAR szFullPattern[MAX_PATH];
WIN32_FIND_DATA FindFileData;
HANDLE hFindFile;
// first we are going to process any subdirectories
PathCombine(szFullPattern, lpFolder,_T("*"));
hFindFile = FindFirstFile(szFullPattern, &FindFileData);
if(hFindFile != INVALID_HANDLE_VALUE)
{
do
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if (_tcscmp(FindFileData.cFileName, _T(".")) != 0 &&
_tcscmp(FindFileData.cFileName, _T("..")) != 0)
{
// found a subdirectory; recurse into it
PathCombine(szFullPattern, lpFolder, FindFileData.cFileName);
FindFilesRecursively(szFullPattern, lpFilePattern);
//_tprintf_s(_T("%s\n"), lpFolder);
}
}
} while(FindNextFile(hFindFile, &FindFileData));
FindClose(hFindFile);
}
// now we are going to look for the matching files
PathCombine(szFullPattern, lpFolder, lpFilePattern);
hFindFile = FindFirstFile(szFullPattern, &FindFileData);
if(hFindFile != INVALID_HANDLE_VALUE)
{
do
{
if(!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
// found a file; do something with it
PathCombine(szFullPattern, lpFolder, FindFileData.cFileName);
_tprintf_s(_T("%s\n"), szFullPattern);
}
} while(FindNextFile(hFindFile, &FindFileData));
FindClose(hFindFile);
}
}
DWORD mydrives = 100;// buffer length
char lpBuffer[100];// buffer for drive string storage
int main()
{
DWORD dwSize = MAX_PATH;
char szLogicalDrives[MAX_PATH] = {0};
DWORD dwResult = GetLogicalDriveStrings(dwSize,szLogicalDrives);
if (dwResult > 0 && dwResult <= MAX_PATH)
{
char* szSingleDrive = szLogicalDrives;
while(*szSingleDrive)
{
// get the next drive
FindFilesRecursively(_T(szSingleDrive), _T("*.txt"));
szSingleDrive += strlen(szSingleDrive) + 1;
}
}
}
私は_tcscmp(FindFileData.cFileName, _T("C:\windows")) != 0
となどをテストしたが、それはまた、私は、私はシステムドライブを検出し、事前
C:\
、のではなく、それを使用するために私のコードで
getenv ("SystemDrive");
を使用するにはどうすればよいかを知りたい、動作しませんでした:、私のコードがあります
注意:NTFSファイルシステムでは大文字と小文字は区別されませんが、ファイル名には**の大文字と小文字の区別がありますので、大文字と小文字を区別しない文字列の比較には '_tcsicmp 'を使用してください。 –