精華區beta C_and_CPP 關於我們 聯絡資訊
※ 引述《theee (系子)》之銘言: : ※ 引述《invers0412 (異議あり)》之銘言: : : 如果你是自己程式裡的open file,就自己作儲存紀錄 : : 如果你是在檔案總管選,但是要在自己程式列出來,就去找"我最近開啟的文件"目錄 : : 如果你不想去找"我最近開啟的文件",那麼就是自己作hook之類的動作,擷取開啟的檔案 : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ : 我是要在檔案總管選,自己程式可以整理出出最常用的程式(類似我的最愛),直接 : 就可以在我自己寫的程式開啟這些檔案程式,不用再去別的資料夾開啟! : 所以我才希望我可以抓到每次我開啟過檔案的位置(在滑鼠點選的時候),把每個位置 : 都記錄下來,我就可以把最常用的link存起來,然後以後我自己寫的程式就可以利用 : ShellExecute的方法開啟他們~~ : 那請問一下您說的Hook大概要怎麼處理呢? 還有我最近開的文件他的位置是在哪? : 我只在開始--->我最近的文件找的到,多謝您的回答 為了找出「我最近的文件」資料夾,其實是不需要動用到 hook 啦~ 其實是能夠透過寫程式來找出「我最近的文件」資料夾 這樣做能找出最近開啟的文件,也不用涉及到 hook 的技術囉.. 我沒學 MFC 只單純用 win32 API 寫一個列出「我最近的文件」裡面檔案的小程式 不過根據這個你應該能夠自己改成 MFC 版了 希望對你有幫助 #include <windows.h> #include <shlobj.h> #include <stdio.h> int main(){ char path[MAX_PATH+1]; WIN32_FIND_DATA fd; HANDLE hFind; if (SHGetSpecialFolderPath(NULL,path,CSIDL_RECENT,FALSE)){ printf("%s\n\n",path); lstrcat(path,"\\*.*"); hFind = FindFirstFile(path,&fd); path[lstrlen(path)-3]=0; do { printf("%s%s\n",path,fd.cFileName); } while (FindNextFile(hFind,&fd)); if (hFind!=INVALID_HANDLE_VALUE) FindClose(hFind); } return 0; } ====== output ====== C:\Documents and Settings\UNARY\Recent C:\Documents and Settings\UNARY\Recent\. C:\Documents and Settings\UNARY\Recent\.. C:\Documents and Settings\UNARY\Recent\Desktop.ini C:\Documents and Settings\UNARY\Recent\嵌入式系統微算專題實驗三.doc.lnk C:\Documents and Settings\UNARY\Recent\donut.wmv.lnk C:\Documents and Settings\UNARY\Recent\04.rm.lnk C:\Documents and Settings\UNARY\Recent\新增文字文件.txt.lnk C:\Documents and Settings\UNARY\Recent\Cd2.lnk C:\Documents and Settings\UNARY\Recent\Software.lnk C:\Documents and Settings\UNARY\Recent\W32.ppt.lnk C:\Documents and Settings\UNARY\Recent\jta26.jar.lnk C:\Documents and Settings\UNARY\Recent\Catherine.doc.lnk C:\Documents and Settings\UNARY\Recent\dmt-match-cd2.rar.lnk C:\Documents and Settings\UNARY\Recent\兩貓看夜景.jpg.lnk C:\Documents and Settings\UNARY\Recent\000.lnk C:\Documents and Settings\UNARY\Recent\GetKeyInfo.vbp.lnk C:\Documents and Settings\UNARY\Recent\最遊記[1-50全].lnk C:\Documents and Settings\UNARY\Recent\必看說明.txt.lnk C:\Documents and Settings\UNARY\Recent\000 (3).lnk C:\Documents and Settings\UNARY\Recent\光碟機.lnk C:\Documents and Settings\UNARY\Recent\lab1.qpf.lnk C:\Documents and Settings\UNARY\Recent\uCOS-II-V276.zip.lnk ........太多了,略..........XD 試試看囉~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.70.137.117 ※ 編輯: UNARYvvv 來自: 61.70.137.117 (05/13 01:10)
theee:很感謝你 .... >"< ..... 05/13 13:02
> -------------------------------------------------------------------------- < 作者: alohaiscool (aloha) 看板: C_and_CPP 標題: Re: [問題] dev c++讀取資料夾裡面每一個檔案? 時間: Fri Mar 12 18:38:23 2010 問題在描述一下 我想要由使用者定義 要讀檔案的位置 然後 把每個檔案讀取進來 做我需要的運算 開發工具 dev c++ 主要兩種方法 我自己改編過 (寫得很爛請見諒,但是對於新手應該比較很好懂) 第一種 使用 #include <dirent.h> #include <iostream> #include <dirent.h> #include <string> #include <iomanip> #include <fstream> using namespace std; int main() { DIR *D; struct dirent *Dirpath ifstream fin; cout<<"please input the file path \n" ; cout<<"path:" ; string filepath; getline(cin,filepath); D = opendir(filepath.c_str()); while (Dirpath = readdir(D)) { if( strcmp(Dirpath->d_name, ".") != 0 && strcmp(Dirpath->d_name, "..") != 0 ) //如果不加上面那一行 讀取出來的檔案會有點點 { string file_in=filepath+Dirp->d_name; //這邊我卡很久...因為會讀不到檔案,最後突然靈光一閃要給他絕對位置 fin.open(file_in.c_str(),ios::in|ios::binary); if (fin.is_open()) { while(!fin.eof()) { //這邊就放你要做的事情} } else {cout<<"file open error\n";} fin.close(); } } system("PAUSE"); return 0; } 第二種是 使用#include <window.h> 網路上找到的 #include <windows.h> #include <iostream> #include <fstream> #include <string> #include <cstdlib> using namespace std; int main() { string path; cout<<"please input the file location (file need to scaled)\n" ; cout<<"location:" ; getline(cin,path); string searchPattern = "*.*"; string fullSearchPath = path + searchPattern; WIN32_FIND_DATA FindData; HANDLE hFind; hFind = FindFirstFile( fullSearchPath.c_str(), &FindData ); if( hFind == INVALID_HANDLE_VALUE ) { cout << "Error searching directory\n"; return -1; } do { string filePath = path + FindData.cFileName; ifstream in( filePath.c_str() ); if( in ) { while(!in.eof()) { //這邊就放你要做的事情 } } else { cout << "Problem opening file " << FindData.cFileName << "\n"; } }while( FindNextFile(hFind, &FindData) > 0 ); if( GetLastError() != ERROR_NO_MORE_FILES ) { cout << "Something went wrong during searching\n"; } system("pause"); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.174.25 ※ 編輯: alohaiscool 來自: 140.112.174.25 (03/12 18:41)
james732:推,這類問題還挺多人問的! 03/12 19:09
loveme00835:推推 03/12 21:38
prime2477:推 03/12 21:40
stockton19:我都呆呆用system("dir")>>rec.log 03/12 22:21
sunneo:dos的也有_dos_findfirst 同windows 03/13 00:05
yoco315:推推 03/13 00:11
> -------------------------------------------------------------------------- < 作者: yoco315 (眠月) 看板: C_and_CPP 標題: Re: [心得] dev c++讀取資料夾裡面每一個檔案? 時間: Sat Mar 13 00:10:45 2010 ※ 引述《alohaiscool (aloha)》之銘言: : 問題在描述一下 : 我想要由使用者定義 要讀檔案的位置 然後 把每個檔案讀取進來 做我需要的運算 好文,我也貢獻一個 qq ┌────────────────────────────────────┐ #include <boost/filesystem.hpp>int main () {namespace fs = boost::filesystem ;typedef fs::directory_iterator dir_iter ;for ( dir_iter i("."); i!=dir_iter(); ++i ) {// 如果是一般的檔案,不是目錄或是link之類的... if ( fs::is_regular_file ( i->status() ) ) {std::ifstream fin ( i->path().file_string().c_str() ) ;// 對 fin 做事 }}}└────────────────────────────────────┘ 其實這是我第一次用 boost::filesystem ="= 以前我都用 system ( "dir/b > _" ) XD -- To iterate is human, to recurse, divine. 遞迴只應天上有, 凡人該當用迴圈.   L. Peter Deutsch -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.160.117.71
sunneo:gj 03/13 01:27
tropical72:好像都沒人拉一個 listbox 來用厚.. lb->Dir 03/13 03:19
nowar100:一看到上色版就知道是yoco大了 XD 03/13 06:59