如何删除C++中的文件夹?
如何使用 C++ 删除文件夹?
如果不存在跨平台方法,那么如何为最流行的操作系统(Windows、Linux、Mac、iOS、Android)做到这一点? POSIX 解决方案适用于所有这些吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如何使用 C++ 删除文件夹?
如果不存在跨平台方法,那么如何为最流行的操作系统(Windows、Linux、Mac、iOS、Android)做到这一点? POSIX 解决方案适用于所有这些吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(18)
如果您使用的是 Linux,也可以尝试以下方法:
You can also try this if you are on linux:
[C++ 17]
为了删除目录及其所有内容(递归地子目录)并最终删除目录本身,请使用 remove_all。
[C++ 17]
In order to delete a directory and all the contents of directory (its subdirectories recursively) and in the end delete directory itself use remove_all from standard library.
这适用于删除目录中的所有目录和文件。
This works for deleting all the directories and files within a directory.
C++ 标准定义了remove() 函数,该函数可能会也可能不会删除文件夹,具体取决于实现。 如果没有,您需要使用特定于实现的函数,例如 rmdir()。
The C++ Standard defines the remove() function, which may or may not delete a folder, depending on implementation. If it doesn't you need to use an implementation specific function such as rmdir().
我没有资格发表评论,所以我必须做出回答。
据我所知,之前的 Windows 解决方案包含一个错误(在检查“.”时:它不会删除像 .ssh 这样的目录)。
此外,缺少对 UTF-8 路径的(现在必需的)管理。
现在我放了一个UNIX/Linux版本,基于修复了以前的功能
I do not have the "reputation" to comment, so I have to make an answer.
As far as I could see the previous solution for Windows contains an error (in checking the ".": it does not delete directories like .ssh for example).
Furthermore, the (now necessary) management of UTF-8 paths is missing.
Now I put a UNIX/Linux version, based on fixed previous functions
//对于窗口:
//For windows:
我自己的实现基于 hB0,它还允许您查看每个文件夹中的文件数量,同时性能也略有提升。
My own implementation based off hB0 that also allows you to view the number of files in each folder also with a little performance boost.
对于 Linux(我已修复上面代码中的错误):
对于 Windows:
For linux (I have fixed bugs in code above):
For windows:
如果您使用 Poco 库,这里是删除目录的便携式方法。
当使用“true”调用remove函数时,意味着递归删除目录中的所有文件和子目录。
If you are using the Poco library, here is a portable way to delete a directory.
The remove function when called with "true" means recursively delete all files and sub directories in a directory.
如果您使用的是 Windows,请查看 此链接。 否则,您可以查找操作系统特定版本的 api。 我不认为 C++ 具有跨平台的方式来做到这一点。 最后,这不是 C++ 的工作,而是操作系统的工作。
If you are using windows, then take a look at this link. Otherwise, you may look for your OS specific version api. I don't think C++ comes with a cross-platform way to do it. At the end, it's NOT C++'s work, it's the OS's work.
尝试使用系统“
rmdir -s -q file_to_delte
”。这将删除该文件夹及其中的所有文件。
Try use system "
rmdir -s -q file_to_delte
".This will delete the folder and all files in it.
对于 C++17,您可以使用
std::filesystem
,在 C++14 中std::experimental::filesystem
< /a> 已经可用。 两者都允许使用filesystem::remove()
。C++17:
C++14:
注 1:
如果出现错误,这些函数会抛出 filesystem_error 。 如果您想避免捕获异常,请使用
std::error_code< 的重载变体/code>
作为第二个参数。 例如
注2:
转换为
std::filesystem::path
不同的编码是隐式发生的,因此您可以将字符串传递给filesystem::remove()
。With C++17 you can use
std::filesystem
, in C++14std::experimental::filesystem
is already available. Both allow the usage offilesystem::remove()
.C++17:
C++14:
Note 1:
Those functions throw filesystem_error in case of errors. If you want to avoid catching exceptions, use the overloaded variants with
std::error_code
as second parameter. E.g.Note 2:
The conversion to
std::filesystem::path
happens implicit from different encodings, so you can pass strings tofilesystem::remove()
.我强烈建议使用 Boost.FileSystem。
http://www.boost.org/doc/libs /1_38_0/libs/filesystem/doc/index.htm
在您的情况下,这将是
boost::filesystem::remove_all(yourPath)
I strongly advise to use Boost.FileSystem.
http://www.boost.org/doc/libs/1_38_0/libs/filesystem/doc/index.htm
In your case that would be
boost::filesystem::remove_all(yourPath)
在不使用 Shell API 的 Windows (VisualC++) 中删除文件夹(子文件夹和文件),这是最好的工作示例:
来源:http://www.codeguru.com/forum/showthread.php?t=239271
Delete folder (sub_folders and files) in Windows (VisualC++) not using Shell APIs, this is the best working sample:
Source: http://www.codeguru.com/forum/showthread.php?t=239271
该目录应该是空的。
The directory should be empty.
使用 SHFileOperation 递归删除文件夹
Use SHFileOperation to remove the folder recursivelly
该目录必须为空,并且您的程序必须有权删除它,
但名为 rmdir 的函数可以执行此操作
The directory must be empty and your program must have permissions to delete it
but the function called rmdir will do it