01/10/2018, 00:56
Xóa một thư mục trong c++ Windows?
Làm thế nào để xóa một thư mục Windows bằng C++?
Mình đã thử RemoveDirectory(filePath.c_str())
; mà không được?
Bài liên quan
Làm thế nào để xóa một thư mục Windows bằng C++?
Mình đã thử RemoveDirectory(filePath.c_str())
; mà không được?
em xài Boost.Filesystem ấy
http://www.boost.org/doc/libs/1_62_0/libs/filesystem/doc/reference.html#remove_all
https://theboostcpplibraries.com/boost.filesystem-paths
(vọc Boost hơi khổ, nỗi cái download với build cũng mệt rồi)
g++ -std=c++14 -O2 -s -o remove remove.cpp -lboost_filesystem-mgw52-mt-1_60 -lboost_system-mgw52-mt-1_60
(phải link thêm 2 thư viện boost_filesystem và boost_system)
MSDN bảo rằng thư mục phải rỗng thì mới xóa kiểu đó đc, thư mục của bạn có rỗng hay không?
Nếu có handle nào đang nắm thư mục đó thì phải close nó trước.
Có thể dùng hàm GetLastError để lấy code lỗi rồi tra cứu trên MSDN xem chính xác là lỗi gì.
Như cách mình thường làm là mình tạo ra một file .bat chứa lệnh xoá rồi chạy file đó, chạy xong thì xoá file .bat đó
Trong cmd có lệnh del /f /s /q <Thư mục A> thì xoá tất cả các file và thư mục con của A
Trong cmd cũng có lệnh rmdir /s /q <Thư mục A> thì xoá A nếu A rỗng.
Có điều mình chỉ chuyên bên C#, nên mình đưa thuật toán này, mong bạn tự chuyển được sang C++
string path = <Đường dẫn đến thư mục chứa thư mục cần xoá> + @"";
tw = new StreamWriter(“Cleaning.bat”); //Tạo file Cleaning.bat
tw.WriteLine(@“del /f /s /q " + “”” + path + “”" + @"<Thư mục cần xoá> 1>nul");
tw.WriteLine(@“rmdir /s /q " + “”” + path + “”" + @"<Thư mục cần xoá>");
tw.Close(); //Kết thúc tạo file Cleaning.bat
System.Diagnostics.Process.Start(“Cleaning.bat”); //Chạy file Cleaning.bat
System.Threading.Thread.Sleep(1000); //Đợi 1 giây
while (File.Exists(“Cleaning.bat”)) //Trong khi file Cleaning.bat đang tồn tại
{
try
{
File.Delete(“Cleaning.bat”); //Xoá thử
}
catch
{
System.Threading.Thread.Sleep(1000); //Nếu không xoá được, tức là file đó đang bật, thì đợi thêm 1 giây
}
}