c語言刪除文件夾
❶ 寫個批處理刪除指定文件或指定文件夾
@EchoOff
For/f"tokens=*"%%iin('dir/a-d/b/s"C:ProgramFiles*.123"')do(
Echo%%i
Del/q/s/a/f"%%i"
)
Pause
(1)c語言刪除文件夾擴展閱讀:
1、批處理代碼需要注意的事項:
批處理中的變數是不區分類型的,不需要像C語言中的變數那樣還要區分int、float、char等。
比如執行setaa=345後,變數aa的值既可以被視為數字345,也可以被視為字元串345。
2、文件夾管理命令釋義:
cd顯示當前目錄名或改變當前目錄。
md創建目錄。
rd刪除一個目錄。
dir顯示目錄中的文件和子目錄列表。
tree以圖形顯示驅動器或路徑的文件夾結構。
path為可執行文件顯示或設置一個搜索路徑。
復制文件和目錄樹。
3、文件管理命令釋義:
type顯示文本文件的內容。
將一份或多份文件復制到另一個位置。
del刪除一個或數個文件。
move移動文件並重命名文件和目錄。
ren重命名文件。
replace替換文件。
attrib顯示或更改文件屬性。
find搜索字元串。
fc比較兩個文件或兩個文件集並顯示它們之間的不同
❷ 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;
}