掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ディレクトリ検索でフォルダもファイルも両方フルパスで表記するには? (ID:52065)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
下記のディレクトリ検索では、指定したディレクトリ内のフォルダを検索することが出来ず、グローバル変数でディレクトリ指定とファイル指定を行っていますが ディレクトリ指定とファイル指定をプロンプト上で行うためには、このソースをどのように変形すれば良いでしょうか? /*ディレクトリ検索(win32 コンソール) 再帰呼び出し処理*/ // インクルードヘッダ #include <windows.h> #include <stdio.h> // 定数宣言 #define MAX_STRING 1025 // 文字列最大数 // 関数プロトタイプ VOID GetDir(LPCTSTR fld, LPCTSTR wcd); VOID FileJob(LPCTSTR fld, LPCTSTR wcd, LPCTSTR fnm, DWORD atr); VOID DirJob(LPCTSTR fld, LPCTSTR wcd, LPCTSTR fnm, DWORD atr); // グローバル変数 TCHAR fld[MAX_STRING] = "c:\\実験\\"; // 検索ディレクトリ TCHAR wcd[MAX_STRING] = "*.txt"; // 検索ワイルドカード TCHAR log[MAX_STRING] = "c:\\実験\\filelist.txt"; // リスト出力ファイル HANDLE fno; // リスト出力ハンドル /* ======================================================================== メイン ======================================================================== */ int main(int argc, char **argv) { int i; // パラメタ取得 for (i = 1; i < argc; i++) { switch (i) { case 1: lstrcpy(fld, argv[i]); // 開始フォルダ break; case 2: lstrcpy(wcd, argv[i]); // ワイルドカード break; case 3: lstrcpy(log, argv[i]); // リスト出力ファイル break; } } // 処理開始 printf("ディレクトリ検索開始...\n"); // ファイルリスト出力用ファイルオープン if ((fno = CreateFile(log, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) return -1; // ディレクトリ検索開始 GetDir(fld, wcd); // ファイルリスト出力用ファイルクローズ CloseHandle(fno); // 処理終了 printf("\nディレクトリ検索終了。\n"); return 0; } /* ======================================================================== ディレクトリ取得 ======================================================================== */ VOID GetDir(LPCTSTR fld, LPCTSTR wcd) { HANDLE dno; TCHAR dir[MAX_STRING]; WIN32_FIND_DATA fil; // ファイル検索条件合成 lstrcat(lstrcpy(dir, fld), wcd); // ファイル検索 if ((dno = FindFirstFile(dir, &fil)) != INVALID_HANDLE_VALUE) { if ((fil.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY) { FileJob(fld, wcd, fil.cFileName, fil.dwFileAttributes); } while(FindNextFile(dno, &fil) != 0) { if ((fil.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY) { FileJob(fld, wcd, fil.cFileName, fil.dwFileAttributes); } } FindClose(dno); } // ディレクトリ検索条件合成 lstrcat(lstrcpy(dir, fld), "*"); // ディレクトリ検索 if ((dno = FindFirstFile(dir, &fil)) == INVALID_HANDLE_VALUE) return; if ((fil.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) { DirJob(fld, wcd, fil.cFileName, fil.dwFileAttributes); } while(FindNextFile(dno, &fil) != 0) { if ((fil.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) { DirJob(fld, wcd, fil.cFileName, fil.dwFileAttributes); } } FindClose(dno); // リターン return; } /* ======================================================================== ファイル処理 ======================================================================== */ VOID FileJob(LPCTSTR fld, LPCTSTR wcd, LPCTSTR fnm, DWORD atr) { TCHAR fil[MAX_STRING]; TCHAR rec[MAX_STRING]; DWORD rlen; // ファイルフルパス合成 lstrcat(lstrcpy(fil, fld), fnm); // ファイル処理 printf("ファイル名: %s - %d\n", fil, atr); wsprintf(rec, "ファイル名: %s - %d\n", fil, atr); WriteFile(fno, rec, lstrlen(rec), &rlen, NULL); // リターン return; } /* ======================================================================== ディレクトリ処理 ======================================================================== */ VOID DirJob(LPCTSTR fld, LPCTSTR wcd, LPCTSTR fnm, DWORD atr) { TCHAR dir[MAX_STRING]; // カレント、親ディレクトリスキップ if (strcmp(fnm, ".") == 0 || strcmp(fnm, "..") == 0) return; // ディレクトリフルパス合成 lstrcat(lstrcat(lstrcpy(dir, fld), fnm), "\\"); // ディレクトリ処理 //printf("フォルダ名: %s - %d\n", dir, atr); printf("."); // サブディレクトリ再帰処理 GetDir(dir, wcd); // リターン return; }
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.