univers1314 2024-11-30 16:22 采纳率: 38.5%
浏览 49

filesystem::remove_all 崩溃的问题

filesystem C++ 17 我写了一个很简单的小程序,就是用函数 filesystem::remove_all 来定时删除一个文件夹里的所有东西。
代码中也用了try和catch来获获异常。
现在有一个问题,就是放在server 2016系统里运行,有时候会崩溃。为什么会这样?
这是哪里出了问题?还是要加什么参数嘛?

if (fs::remove_all(entry.path()))        //删除文件夹
{
cout << "< command successfully ! >" << endl;
}
else
{
cout << "< command failed ! >" << endl;
}

if (fs::remove(entry.path()))        //删除文件
{
cout << "< command successfully ! >" << endl;
}
else
{
cout << "< command failed ! >" << endl;
}

img

我猜应该是文件名太长了,比如说一个目录里,下面有几个超长的文件夹,最后面的文件名也超长,导至filesystem函数崩溃的。
如果没有超长的,她是可以正常删除的,不会崩溃。

  • 写回答

2条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    在您的问题中,当使用filesystem::remove_all函数时程序出现崩溃的现象可能与以下几个因素有关:

    1. 权限问题:在某些操作系统上,尤其是Windows系统,文件夹和文件的删除可能需要特定的权限。如果程序没有足够的权限去删除某些文件或文件夹,可能会导致崩溃。确保您的程序以管理员权限运行。
    2. 文件系统状态问题:在某些情况下,文件系统可能处于不稳定状态(例如正在进行其他操作或有进程占用资源)。尝试在不同的时间点运行您的程序以查看是否只有特定时间才会出现这个问题。
    3. 资源泄漏或其他并发问题:如果程序中其他地方存在资源泄漏或并发问题,可能会导致在调用remove_all时出现问题。确保您的程序其他部分没有潜在的问题。
    4. 库版本问题:确保您使用的标准库版本与操作系统兼容,并正确配置。某些特定的系统可能需要特定的库版本才能正常工作。

    为了调试这个问题,您可以尝试以下步骤:

    • 使用调试器调试:当程序崩溃时,选择“重试”以使用调试器调试程序。这可以帮助您找到导致崩溃的具体代码行和原因。
    • 检查异常捕获:虽然您已经使用了try-catch块来捕获异常,但确保正确处理所有可能的异常。特别是与文件系统操作相关的异常。
    • 检查返回值:检查remove_all函数的返回值以确定是否成功删除了文件或文件夹。如果返回false,可能有错误信息可以提供更多线索。
    • 日志记录:添加更多的日志记录以跟踪程序的行为和状态,这有助于确定问题的根源。
    • 简化代码:尝试简化代码,只保留与删除操作相关的部分,以排除其他潜在的问题源。

    最后,如果您已经尝试了上述建议但问题仍然存在,建议您查看具体的错误消息或堆栈跟踪信息来获取更多关于问题的线索,或者考虑寻求专业的技术支持来帮助解决此问题。

    评论

报告相同问题?

问题事件

  • 修改了问题 12月2日
  • 创建了问题 11月30日