vc遍歷文件夾與文件
⑴ 璇烽棶濡備綍鐢╟璇璦瀹炵幇閬嶅巻鏌ユ壘紓佺洏涓嬬殑exe鏂囦歡錛 鎴戞槸鍦╒C6.0騫沖彴涓
璋冪敤DOS 鍛戒護 dir 灝卞彲浠ヤ簡銆
濡傛灉鍙瑕佹樉紺烘枃浠跺悕錛屽姞 閫夐」 /B
濡傛灉瑕佹樉紺烘墍鏈夊瓙鏂囦歡澶歸噷鐨勬枃浠跺悕錛 鍔 閫夐」 /S
渚嬪 DIR C:\*.exe /B /S
濡傛灉瑕佹妸鏄劇ず 杞鍚戝埌鏂囦歡 DIR C:\*.exe /B /S >> abc.lis
DOS 鍛戒護 鍙浠ョ敤 sprintf 鍋氭垚錛岀敤 system() 璁╁畠鎵ц屻
紼嬪簭濡備笅錛
#include <stdio.h>
#include <stdlib.h>
main(){
char cmd[80];
char d;
for (d='C';d<='Z';d++) // 瀵 紓佺洏鍙 C: D: E: .....Z: 寰鐜
{
sprintf(cmd,"DIR %c:\\*.exe /B",d); // 鍛戒護
// printf("%s\n",cmd); // 媯鏌 鍛戒護瀛楃︿覆 鏄鍚︽g『
system(cmd); // 鎵ц
}
return 0;
}
什麼叫純C?
用C語言遍歷文件肯定需要用到函數,標准C下貌似沒有這個函數,但是使用VC的函數庫可能可以實現,如果實在不行可以用第三方函數庫,,,還不行的話用system("command");引用dos命令可以遍歷,
⑶ 鎴戞兂鐢╒C鏌ユ壘涓涓鏂囦歡澶歸噷鐨勬墍鏈塗XT鏂囨。涓鏈鏂扮殑涓涓 騫惰誨彇瀹冪殑鍐呭 璇烽棶濡備綍鎿嶄綔錛燂紵錛
緇欎綘涓涓鎬濊礬鍏堥亶鍘嗚繖涓鏂囦歡澶逛笅鐨則xt鏂囦歡錛岀劧鍚庨愪釜鍒涘緩姣旇緝鏃墮棿錛屽苟淇濆瓨鏈鏂扮殑鏂囦歡鍚嶅埌涓涓鍙橀噺涓婇潰錛岀劧鍚庣敤CFile錛氾細read璇誨彇鍐呭廣
緇欎綘涓孌典吉浠g爜鑷宸變慨鏀硅瘯璇
HANDLEhSearch;
WIN32_FIND_DATAFileData,tempFileData;
hSearch=FindFirstFile("E:\XX\*.txt",&FileData);//棣栧厛鎵懼埌鐨勬槸鈥.鈥
if(hSearch==INVALID_HANDLE_VALUE)return0;
if(!FindNextFile(hSearch,&FileData))return0;//鐒跺悗鎵懼埌鐨勬槸鈥..鈥
FindNextFile(hSearch,&tempFileData);//鎶婄涓涓鏂囦歡鐨勪俊鎮淇濆瓨鍦╰empFileData涓
while(1)
{
if(!FindNextFile(hSearch,&FileData))
break;
else
{
if錛圕ompareFileTime(FileData.ftCreationTime,tempFileData.ftCreationTime)==-1錛墈
tempFileDataFileData
}
}
}
FindClose(hSearch);
CFilefile;
file.open("璺寰+\tempFileData.cFileName");
charbuf[xx];
file.read(buf......);
file.close();
⑷ VC6.0編譯環境下遍歷文件夾的源代碼
#include "stdafx.h"
#include <windows.h>
BOOL IsRoot(LPCTSTR lpszPath)
{
TCHAR szRoot[4];
wsprintf(szRoot, "%c:\\", lpszPath[0]);
return (lstrcmp(szRoot, lpszPath) == 0);
}
void FindInAll(::LPCTSTR lpszPath)
{TCHAR szFind[MAX_PATH];
lstrcpy(szFind, lpszPath);
if (!IsRoot(szFind))
lstrcat(szFind, "\\");
lstrcat(szFind, "*.*"); // 找所有文件
WIN32_FIND_DATA wfd;
HANDLE hFind = FindFirstFile(szFind, &wfd);
if (hFind == INVALID_HANDLE_VALUE) // 如果沒有找到或查找失敗
return;
do
{
if (wfd.cFileName[0] == '.')
continue; // 過濾這兩個目錄
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
TCHAR szFile[MAX_PATH];
if (IsRoot(lpszPath))
wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName);
else
wsprintf(szFile, "%s\\%s", lpszPath, wfd.cFileName);
FindInAll(szFile); // 如果找到的是目錄,則進入此目錄進行遞歸
}
else
{
TCHAR szFile[MAX_PATH];
if (IsRoot(lpszPath))
wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName);
else
wsprintf(szFile, "%s\\%s", lpszPath, wfd.cFileName);
printf("%s\n",szFile);
// 對文件進行操作
}
} while (FindNextFile(hFind, &wfd));
FindClose(hFind); // 關閉查找句柄
}
int main(int argc, char* argv[])
{
FindInAll("e:\\result");
return 0;
}
//結合網上資料寫出的,作者--楊克群^_^
⑸ VC環境中用C語言查找當前路徑下的所有文件和文件夾的函數是什麼
這是我的TFTP程序中的一個函數,是搜索當前盤符下的所有文件,包括文件的大小,並發送到客戶端,其中就有查找當前路徑下的文件,你自己挑一下,應該能完成你的需求。
void FileList(sockaddr_in sour_addr,char strStartDir[])
{
char sendbuffer[1024];
sockaddr_in destaddr;
int sourlen = 0;
int ret = 0;
int len = 0;
int flen = 0;
fd_set fdr;
unsigned short blocknum = 0;
FILE *file;
char filename[128];
strcpy(filename,strStartDir+2); /*獲取文件名*/
strcat(filename,"\\*");
destaddr.sin_family = AF_INET;
destaddr.sin_port = sour_addr.sin_port;
destaddr.sin_addr.s_addr = inet_addr(desthost);//
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
hFind = FindFirstFile(filename, &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
printf ("Invalid File Handle");
}
else
{
while(FindNextFile(hFind,&FindFileData))
{
printf(FindFileData.cFileName);
printf("\r\n");
memset(sendbuffer,'\0',1024);
len = filldata(blocknum++,FindFileData.cFileName,strlen(FindFileData.cFileName),sendbuffer,sizeof(sendbuffer));
ret = sendto(serverSock,sendbuffer,len,0,(sockaddr *)&destaddr,sizeof(destaddr));
}
len = fillover(blocknum,"Over",4,sendbuffer,sizeof(sendbuffer));
ret = sendto(serverSock,sendbuffer,len,0,(sockaddr *)&destaddr,sizeof(destaddr));
FindClose(hFind);
return;
}
}
⑹ MFC CFileFind和CFile遍歷一個指定文件夾並刪除裡面的所有文件(裡面沒有下層文件夾目錄)問題
首先鄙視一下樓主的代碼 毫無章法 亂定義變數 居然還不按同一風格定義
其次 你寫的這玩意 我不知道 你是想學習字元轉換呢 還是 想遍歷文件
最後我想說的是 他們說的都沒找到本質問題上去
把這句話
pFile = (LPSTR)(LPCTSTR)finder.GetFilePath();
改為 下面2句
CString str = finder.GetFilePath();
pFile = (LPSTR)(LPCTSTR) str;
你的程序就沒問題了
下面看偶的分析
第一
char* pFile;
TCHAR* p;
你讓 p = pFile ; 居然沒出問題 說明 你的char 和 TCHAR 是一樣的玩意 你多半用的是VC6開發
要麼就是自己設置了工程屬性為 多位元組的, 所以根本不存在什麼 字元集的轉換
什麼 UNICODE ANSI 多位元組都是瞎扯
第二
斷點tiao'shi
pFile = (LPSTR)(LPCTSTR)finder.GetFilePath();
執行後 pFile 指向的是亂碼 所以你再往後運行肯定就會出錯了
仔細看一下 finder.GetFilePath() 返回的是一個CString;
莫非樓主的 從CString 轉換 為 char * 的方式錯誤了?
測試
CString str("123");
pFile = (LPSTR)(LPCTSTR) str;
完全沒有問題啊...
所以問題 歸根到底 在與 返回值是 CString 會導致很多 bug的哦
這如果要說起來就太多了... 樓主再找度娘吧
//-- 下面的寫法稍微規范點 我就不懂 你定義 TCHAR 為了什麼
int main()
{
CFileFind finder;
CString path("D:\\1\\Cache\\");
CString file;
BOOL has = finder.FindFile(path+"*.*");
while(has)
{
has = finder.FindNextFile();
//IsDots 就是的 . 和 .. 如果你不判斷是文件夾 它會把當成文件去刪除,結果去刪除不掉
//在Windows系統下 文件和文件夾被看作同樣的東西
if( !finder.IsDots() && !finder.IsDirectory() )
{
file= finder.GetFilePath();
//CFile::Remove(file); 你這函數都沒有返回值 你好意思直接就在下面顯示刪除成功
if (DeleteFile(file))
{
cout<<file<<" 刪除成功"<<endl;
}
else
{
cout<<file<<" 刪除失敗, 非共享的文件是否正在使用?"<<endl;
}
}
}
finder.Close(); //----
return 0;
}