C ++我应该在删除之前检查文件是否存在吗?

时间:2016-07-28 13:10:42

标签: c++ c file delete-file

很简单,我想删除可能存在或不存在的文件。使用remove(filename)并忽略返回值是不好的做法吗?

编辑:删除后,我指的是this

5 个答案:

答案 0 :(得分:2)

  

在删除文件之前,我应该检查文件是否存在吗?

没有这样的要求或需要,这样做没有任何用处。

  

并忽略返回值?

通常,用户可能想知道文件是否被删除,因此忽略返回值通常是个坏主意。此外,用户可能还想知道为什么文件未被删除(参见std::perror)。

答案 1 :(得分:1)

只要你不能锁定文件系统

  1. 检查文件是否存在
  2. 将其删除
  3. 您无法保证在1检查文件未被其他进程删除后。

    所以你应该:

    1. 致电remove功能
    2. 获取重新设定值
    3. 检查是否有错误
    4. [使用perror来电显示错误文字]

答案 2 :(得分:0)

您的问题的答案实际上取决于您的计划,您提供的链接非常有用。如果你的程序是微不足道的,我不会这样做,但是如果你的程序非常重要,我会检查值,就像cpluslplus.com那样,因为总是应该检查返回值。这不好,因为它就像是在说:“我不会检查此函数的返回值,并且故意不会涵盖所有可能性。”

答案 3 :(得分:0)

  

C ++我应该在删除之前检查文件是否存在吗?

您可以,但永远依赖于代码中的结果。您可以在代码和可能在同一文件上竞争的其他线程/应用程序之间引入竞争条件。请考虑以下事项:

  1. 应用程序#1检查foo.txt是否存在。结果是真的。
  2. 应用程序#2检查foo.txt是否存在。结果是真的。
  3. 应用程序#1删除foo.txt。成功了!
  4. 应用程序#2删除foo.txt。哎呦!
  5.   

    使用remove(filename)...

    是不好的做法

    不,完全没有。

      

    ...并忽略返回值?

    您唯一想忽略系统调用的返回代码的时间是真的不关心结果,这确实非常罕见。删除文件时,您应该记录返回值,然后如果/当文件无法删除(例如权限问题,已删除等),您可以通知用户操作失败或记录以进行调试。

答案 4 :(得分:0)

这是一个非常难以回答的问题。如果您不关心文件是否实际被删除,但无论如何都要忽略返回值。如果不检查返回值,则无法保证文件是否已被删除。最有可能的是,它会是,但如果由于某种原因被锁定怎么办?那你可能遇到麻烦了。正如有人指出的那样,不检查返回代码是非常受欢迎和希望的情况。