English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

請問C++能夠開啟目錄嗎!?
如果可以 請問一下如果讀取該目錄下所有檔案的名稱呢!?

2005-09-28 19:18:43 · 6 個解答 · 發問者 建宏 3 in 電腦與網際網路 程式設計

不是很懂@~@||||
我是這樣寫的
const char *dir="C:\\桌面\\新資料夾";
DIR *a=opendir(dir); //不知道對不對= =||||
readdir(a);
cout< 然後就不知道怎樣寫了@@~

2005-09-29 17:36:01 · update #1

const char *dir="C:\\桌面\\新資料夾";
DIR *a=opendir(dir);
struct dirent *b=readdir(a);
while (b!=NULL) {
cout<d_name< b=readdir(a);
delete b->d_name;
}
delete b;
closedir(a);

2005-09-29 18:20:01 · update #2

這樣可以run,但是為什麼前兩行會是
.
..
??
那如果碰到子資料夾 要再開啟子資料夾 該怎麼辦??

2005-09-29 18:20:23 · update #3

我用程式讀取一個資料夾 大概有400多個圖檔吧!!
可是實際上讀到的檔案數確比400多比還要少(200出頭= =|||)
為啥會變成這個樣子@~@?

2005-09-29 20:01:25 · update #4

QQ 原來是我寫錯了= =||||
我在迴圈跑的時候指向下一個檔案又在迴圈結束的地方指向下一個檔案
所以才會變成這樣= =|||||
想問一個不太相干的問題 我要把檔案名稱改成1.2.3.4.5應該要怎樣做阿!?
我知道要用remove做 可是裡面都要用char並不能使用int
我也寫出用char做出那種效果的code 但是套用上去以後確怪怪的
有比較簡單的方法可以做嗎??

2005-09-30 15:08:47 · update #5

嗯嗯 我知道rename的用法 上面打錯了= =||||||
只是我想將檔名改成1,2,3,4....依序下去
可是rename改變的檔案名稱 傳進去的只能是char而不能傳進去int
所以想問看看有沒有簡單的方法可以讓char變成1.2.3.4.5...這樣遞增上去的方法

2005-09-30 18:40:09 · update #6

真是太感謝啦
只是書上沒寫itoa這個東西= =||||
只有寫atoi 真是太感謝啦 問這麼多問題= =\||||

2005-09-30 19:56:18 · update #7

6 個解答

剛剛看到你用的是Dev-C++. 所以我來講Dev-C++的方法吧在Dev-C++裡你可以用opendir(), readdir(), 和closedir()此三個函式來取得在某個資料夾(目錄)裡所有檔案和資料夾.就像檔案一樣. 如果你要讀檔, 你要先用open()/fopen()/ofstream的open()開檔, 再用write()/fwrite()/<<讀取資料, 之後用close/fclose()/ofstream的close()關檔. 在讀取資料夾(目錄)裡所有檔案和資料夾也是差不多. 你也要先用opendir()開資料夾, 再用readdir()讀取資料, 之後用closedir()關資料夾.1. 用opendir()來開資料夾. opendir()有個引數(參數). 這個引數是要讀取的資料夾的path(位置). opendir()回回傳一個指向struct DIR的指標. 你將用此指標來讀取資料夾裡的檔案和資料夾. 如果opendir()回傳NULL那表示在開資料夾出錯.2. 用readdir()來讀. readdir()有個引數(參數). 這個引數就是你從opendir()得到的指向struct DIR的指標. 每次呼叫readdir(), readdir()會回傳一個指向struct dirent的指標. 此指標指向的struct dirent裡代表一個在資料夾裡的檔案或資料夾. 所以你第一次呼叫readdir()時, readdir()會回傳資料夾裡的第一個檔案或資料夾的資料. 第二次呼叫readdir()時, readdir()會回傳資料夾裡的第二個檔案或資料夾的資料. 如果readdir()回傳NULL的話那表示讀的資料夾已讀完了. 以下是struct dirent的定義.struct dirent{    long d_ino; //在Windows裡無意義. 應是0. 是給linux/unix用的    unsigned short d_reclen; //在Windows裡無意義. 應是0. 是給linux/unix用的    unsigned short d_namlen; //d_name的長度    char d_name[FILENAME_MAX]; //d_name代表檔案或資料夾的名字}我想你要的是d_name[]和d_namelen吧?3. 用closedir()來關資料夾. closedir()有個引數(參數). 這個引數就是你從closedir()得到的指向struct DIR的指標.所有opendir(), readdir(), 和closedir()都是宣告在dirent.h裡.知道此三個函式之後, 你可以先呼叫opendir(), 之後用個while迴圈用opendir()回傳的指標一直呼叫readdir()並顯示出readdir()回傳的指標裡的d_name. 顯示完之後記得free readdir()回傳的指標. while迴圈之後用opendir()回傳的指標呼叫closedir()就可以顯示出所有在某個資料夾(目錄)裡所有檔案和資料夾的名字了若想知道VC++的話請再問. 懂不懂?不懂請再問.--------------------------------------------const char *dir="C:\\桌面\\新資料夾"; DIR *a=opendir(dir); //完全正確readdir(a);//要記得readdir()會回傳一個指向struct dirent的指標.那個指向struct dirent的指標才有你要的d_name.//只呼叫readdir()一次只會給你第一個檔案或資料夾的資料.你要用個迴圈一直呼叫readdir()直到readdir()回傳NULL為止.//每呼叫readdir()一次就把readdir()回傳的struct dirent的指標中的d_name顯示出來.顯示完就可呼叫free.//迴圈之後記的呼叫closedir()來關資料夾.懂不懂?不懂請再問.--------------------------------------------寫的不錯喔.有一點小錯誤.應用free而不是delete.且不需closedir(a);之前的delete b;記得stat()/fstat()嗎?如用此法,你要對每個dirent用stat()來判斷此dirent是檔案還是資料夾.若是資料夾就在用opendir(), readdir(), closedir()就好了.勸你把opendir(), readdir(), closedir()寫成一個函式,這樣比較好用.不然你也可以用微軟的_findfirst(), _findnext(), _findclose().如用微軟的_findfirst(), _findnext(), _findclose()你則不需用stat().因傳回來的_finddata_t裡會告訴你此為檔案還是資料夾.只省stat()這步而已懂不懂?不懂請再問.----------------------------------------------------能否把你的程式碼刊出?資料夾裡有400多筆檔案或子資料夾但你只讀出200多筆?----------------------------------------------------用rename()來改檔案名.rename()有2個引數(參數).第一個是你要改名的檔案名.第二個是新名子.例:rename("test1.cpp", "test2.cpp");會把test1.cpp的名字改成test2.cpp----------------------------------------------------用一個有11個char的字串叫name和一個int的變數叫id.id從1開始往上走.用itoa()把id裡的值轉成字串存入name裡之後呼叫rename()就行了

2005-10-01 07:10:13 補充:
char *math=new char; 你只宣告一個字元. 把他改成char math[15];

2005-10-04 07:30:11 補充:
對不起,最近忙.沒上網.能否給我你的email?

2005-09-29 06:17:49 · answer #1 · answered by 7 · 0 0

到下面的網址看看吧

▶▶http://qaz331.pixnet.net/blog

2014-10-30 02:36:18 · answer #2 · answered by Anonymous · 0 0

這有類似的

▶▶http://qoozoo2014091500.pixnet.net/blog

2014-09-21 22:31:29 · answer #3 · answered by Anonymous · 0 0

到下面的網址看看吧

▶▶http://*****

2014-09-03 04:43:17 · answer #4 · answered by Anonymous · 0 0

還是要去 http://aaashops。com 品質不錯,老婆很喜歡!
享吔剟

2013-12-27 10:50:19 · answer #5 · answered by Anonymous · 0 0

const char *dir="C:\\桌面\\新資料夾";
DIR *a=opendir(dir);
struct dirent *b;
int i=0;
for (;(b=readdir(a))!=NULL;i++)
;

2005-10-01 00:21:24 補充:
char *name[i];
rewinddir(a);
for (int j=-1;(b=readdir(a))!=NULL;j++) {
if (j==-1) continue;
name[j]=b->d_name;
}
closedir(a);
chdir(dir);

2005-10-01 00:23:14 補充:
char *math=new char;
for (int l=1;l itoa(i,math,10);
strcat(math,".jpg");
rename(name[l-1],math);
cout< }

2005-10-01 00:25:29 補充:
上面是我對一個資料夾內的檔案 更改檔名的code
但是檔案名稱 還是沒辦法按照遞增來更改名稱
不知道到底錯在哪裡= =||||
因為 在資料夾開啟的時候 變更檔名好像會照成同樣的檔案重新被讀取
所以 我利用一個陣列來儲存名稱 然後再加以更改
籠大大 幫我看看 到底錯在哪裡吧@~@||||

2005-10-01 10:06:43 補充:
沒有用說@~@|||| 我後來發現
rename(name[l],math);
結果跟他本就沒有更改檔名= =||||
不知道事務啥@~@||||

2005-10-01 11:51:04 補充:
龍大大阿!!我已經改了一天還是沒成功= =||||
可否請你寫一個範例給我作為參考@~@|||

2005-09-30 20:20:58 · answer #6 · answered by 建宏 3 · 0 0

fedest.com, questions and answers