[問題] 資料夾下未知的檔名該如何讀取?

看板C_and_CPP (C/C++)作者 (2+2=0)時間16年前 (2009/09/25 14:05), 編輯推噓4(4020)
留言24則, 3人參與, 最新討論串1/1
在 E:\TESTAREA\test\1\debug 裡面有許多的未知檔案 .exe .rar .wav ...etc 且檔案的數量不固定 有可能現在有10個 之後會有55個 甚至更多!! 而我必須讀取資料夾中所有檔案的副檔名 來判斷哪些檔案是我要的 哪些是不要的 現在碰到的問題是: 有甚麼指令可以只讀取檔名or副檔名? google&爬板過 有人建議使用 FindFirstFile 和 FindNextFile 以下是我測試的程式: 假設在debug這個資料夾底下有 oop.rar和 1.exe這兩個檔案 #include "stdafx.h" #include <windows.h> #include <tchar.h> #include <stdio.h> #include <iostream> int _tmain(int argc, _TCHAR* argv[]) { WIN32_FIND_DATA FindFileData; HANDLE FileHandle; FileHandle = FindFirstFile("E:\\TESTAREA\\test\\1\\debug",&FindFileData); if (FileHandle == INVALID_HANDLE_VALUE) { printf ("FindFirstFile failed (%d)\n", GetLastError()); system("pause"); return 0; } else printf("The dictionary found is %s\n",FindFileData.cFileName); FindNextFile(FileHandle,&FindFileData); if (FileHandle == INVALID_HANDLE_VALUE) { printf ("FindNextFile failed (%d)\n", GetLastError()); system("pause"); return 0; } else printf("The first file found is %s\n",FindFileData.cFileName); FindClose(FileHandle); return 0; } 在第一次的printf()出現的是debug 也就是目前目錄是指在debug這個資料夾下 但第二次的printf() 也就是 FindNextFile 那行執行的程式 也是一樣出現debug 也就是還是同樣只在debug這個資料夾底下 並沒有去讀取到debug下的第一個檔案名稱~也就是沒有讀取到 oop.rar這個檔名!! 請問是哪邊有出錯嗎?? 其實對FindFirstFile 和 FindNextFile 的用法及指令格式 沒有很了解!! 找不到!! MSDN也沒向 Cplusplus 寫他的指令格式 以下附上MSDN library的網址 http://msdn.microsoft.com/en-us/library/aa364418(VS.85).aspx 也想順便請問一下~ google查到不少FindFirstFile範例(可是都看不太懂@@) 裡面都是藉由argv[]來輸入檔案路徑 請問一定要用argv[]嗎? 可不可以像我上面的範例 直接輸入字串指定路徑給他? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.124.72.230

09/25 14:17, , 1F
補充: 使用VS C++ 2005!!
09/25 14:17, 1F

09/25 14:21, , 2F
這是char/w_char/tchar這之間的問題, 請自己MSDN....
09/25 14:21, 2F

09/25 14:21, , 3F
不然簡單的改用 FindFirstFileA 應該可以解決....:)
09/25 14:21, 3F

09/25 14:50, , 4F
把所有字串都用TEXT() 包起來。
09/25 14:50, 4F

09/25 16:11, , 5F
V大 char/wchar/tchar之間的關係我瞭了~可是還是不知該怎麼
09/25 16:11, 5F

09/25 16:14, , 6F
改善!? 另外為啥加了TEXT()之後就可以了!?我的程式目前是在
09/25 16:14, 6F

09/25 16:16, , 7F
unicode下跑~他顯示"無法將參數1從'const char[26]'轉成
09/25 16:16, 7F

09/25 16:17, , 8F
LPCWSTR是因為我沒有將char轉成wchar的形式嗎!? 加了TEXT()
09/25 16:17, 8F

09/25 16:17, , 9F
之後也就會自動轉成wchar ??
09/25 16:17, 9F

09/25 16:33, , 10F
我想到更簡單的方法了, 把 "...." 變成 L"...." 應該就
09/25 16:33, 10F

09/25 16:33, , 11F
可以了....
09/25 16:33, 11F

09/25 16:34, , 12F
簡單的說, 你的proj目前setting讓你在call WinAPI時會用
09/25 16:34, 12F

09/25 16:34, , 13F
w_char array, 可是你傳參數的時候 "..." 只是普通的
09/25 16:34, 13F

09/25 16:35, , 14F
char array, 所以API在跟你argu它收到的是不一致的型態,
09/25 16:35, 14F

09/25 16:35, , 15F
它想要wild char string, 可是你餵的是普通char string.
09/25 16:35, 15F

09/25 16:36, , 16F
另一個方法, 我記得不要define UNICODE就好了, 去proj
09/25 16:36, 16F

09/25 16:36, , 17F
setting裡應該找得到....:)
09/25 16:36, 17F

09/25 16:47, , 18F
ok 解決了!果然是這個問題XD 非常感謝你 V大!!
09/25 16:47, 18F

09/25 17:00, , 19F
不過如果考慮程式的一致性, 既然有tchar了, 也許不要直
09/25 17:00, 19F

09/25 17:01, , 20F
接用 L"...", 記得好像 _T"..." 就會去check setting了.
09/25 17:01, 20F

09/25 23:44, , 21F
有哪位高手可以幫我解答一下FindFirstFile的問題嗎?
09/25 23:44, 21F
※ 編輯: a95297 來自: 218.166.220.127 (09/26 00:25)

09/26 01:51, , 22F
自推一下~解出來了~路徑改成debug\\*.* 即可!!
09/26 01:51, 22F

09/26 09:53, , 23F
所以應該搞定囉?? 不好意思昨天睡比較早....XD
09/26 09:53, 23F

09/26 13:05, , 24F
目前問題解決了~V大很謝謝你的開導 之後有碰到問題再找你XD
09/26 13:05, 24F
文章代碼(AID): #1Al5szXJ (C_and_CPP)
文章代碼(AID): #1Al5szXJ (C_and_CPP)