目錄下的檔案名稱改成短檔名 |
尚未結案
|
fbiceo
一般會員 發表:6 回覆:12 積分:3 註冊:2004-08-04 發送簡訊給我 |
以下的程式碼是在站上蒐集的,不過現在要找好像找不到,對提供者先至上歉意
void TForm1::DirFiles(AnsiString RootDir, bool chkSubDir, bool incPath) { chdir(RootDir.c_str()); // 切換到指定目錄去 TSearchRec Sr; // 設 Sr 為存放檔案資訊的結構變數 AnsiString FileName; // 設定檔案名稱之用的暫存變數 char dos_name[256]; int done = FindFirst("*.*", faDirectory | faAnyFile, Sr); while (done == 0) { if (!(Sr.Attr & faDirectory)) // 如果是檔案 { if (incPath) // 如果檔名要包含路徑資料在內 { char curdir[MAXPATH 1]; GetCurrentDirectory(MAXPATH, curdir); // 取得現行目錄名稱 FileName = AnsiString(curdir) "\\" Sr.Name; // 設定含路徑的檔名 } else { FileName = Sr.Name; // 設定不含路徑的檔名 } //這裡我先取得短檔名在dos_name GetShortPathName(FileName.c_str(),dos_name,1024); //使用RenameFile將原本抓的檔名改成短檔名,不過都不會改,是哪裡出問題呢? RenameFile(FileName,dos_name); Form1->Memo1->Lines->Add(FileName "\t" dos_name); // 此處設置您自己要處理的動作 } else if(chkSubDir) // 如果要檢查次目錄內的檔案 { if (Sr.Name != "." && Sr.Name != "..") // 如果不是相對目錄代碼的話 { DirFiles(Sr.Name.c_str(), true, incPath); // 如果是目錄的話就遞迴處理 chdir(String("..").c_str()); // 切換回前一層目錄 } } done = FindNext(Sr); // 找目錄中的下一個檔案 } FindClose(Sr); }謝謝大家的指導 |
fbiceo
一般會員 發表:6 回覆:12 積分:3 註冊:2004-08-04 發送簡訊給我 |
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
|
fbiceo
一般會員 發表:6 回覆:12 積分:3 註冊:2004-08-04 發送簡訊給我 |
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
|
fbiceo
一般會員 發表:6 回覆:12 積分:3 註冊:2004-08-04 發送簡訊給我 |
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
引言: 我發現好像無法直接將檔案名稱改成他的短檔名 例如 abcabcabc.txt 系統抓的短檔名是 ABCABC~1.TXT 如果在資料夾自己直接改為ABCABC~1.TXT會無法修改,還是維持原本 那有辦法用其他的方式改嗎? 謝謝各位解答fbiceo:你所謂的短檔名就是Dos Name,也稱為8.3格式檔名, 檔名最多限8字!檔名一但超過8字8.3格式會採用類似所謂縮排的方式顯示, 也就是你見到的ABCABC~1.TXT但它實際上還是長檔名。你必須要自行判斷處理! 請參考! Andy Chang
------
Andy Chang |
fbiceo
一般會員 發表:6 回覆:12 積分:3 註冊:2004-08-04 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
fbiceo 您好: 您那段程式碼是我寫的,應該是在下列這篇裡找到的:
如何得到資料夾裡所有的檔案名稱
http://delphi.ktop.com.tw/topic.php?topic_id=74870
我看了您的需求描述後,覺得您似乎是在邏輯上犯了一個小小的錯誤,因為您使用 GetShortPathName() 所取得的短檔名,其實也是原檔名,您將檔案作相同名稱的更名動作,實際上等於是白做了,如果您真的要做到您所描述的動作,那麼我提供兩種方式,應該可以達到您的需求:
1. 取得短檔名之後,先將長檔名更名為一個暫存的檔名,然後再更名為原來的短檔名,也就是以兩次更名動作來做間接更名。 2. 將您原來的更名動作更改如下:
RenameFile(FileName, LowerCase(AnsiString(dos_name)));
第二種方式雖然也是直接用取得的短檔名來更名,但是檔案名稱是允許在大小寫不相同時,進行更名動作的。 您試試看吧。 7 天天敲鍵盤 v 時時按滑鼠 8
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |