C++ 我应该在删除文件之前检查文件是否存在吗?
C++ Should I check whether a file exists before deleting it?
很简单,我想删除一个可能存在也可能不存在的文件。仅使用 remove(filename) 并忽略 return 值是不好的做法吗?
编辑:通过删除,我指的是 this
您问题的答案实际上取决于您的程序,您提供的 link 非常有帮助。如果你的程序很简单,我不会这样做,但如果你的程序很重要,我会检查值,就像 cpluslplus.com 那样,因为你 always 应该检查 return 值。不这样做是不好的,因为这就像在说:"I won't check the return value to this function, and intentionally not cover all possibilities."
一旦你不能为
锁定文件系统
- 检查文件是否存在
- 删除它
您无法保证在 1
之后检查文件没有被另一个进程删除。
所以你应该:
- 调用
remove
函数
- 获取返现值
- 检查是否有错误
- [使用
perror
调用显示错误文本]
Should I check whether a file exists before deleting it?
没有这样的要求或需要,这样做是没有任何用处的。
and ignore the return value?
通常,用户可能想知道文件是否被删除,因此忽略 return 值通常是个坏主意。此外,用户可能还想知道为什么 文件没有被删除(参见std::perror
)。
C++ Should I check whether a file exists before deleting it?
可以,但是您应该永远不要依赖代码中的结果。您可以在您的代码和可能竞争同一文件的其他 threads/applications 之间引入竞争条件。考虑以下因素:
- 应用程序 #1 检查
foo.txt
是否存在。结果为真。
- 应用程序 #2 检查
foo.txt
是否存在。结果为真。
- 应用程序 #1 删除
foo.txt
。成功!
- 应用程序 #2 删除
foo.txt
。哎呀!
Is it bad practice to just use remove(filename)...
不,一点也不。
...and ignore the return value?
唯一一次您想忽略系统调用的 return 代码是当您 真的 不关心结果时,这确实非常罕见.删除文件时,应该记录return值,然后if/when文件无法删除(例如权限问题,已删除等)您可以通知用户操作失败或记录它用于调试目的。
这是一个很难回答的问题。如果您不关心文件是否真的被删除,但无论如何,请忽略 return 值。如果不检查 return 值,则无法保证文件是否已被删除。最有可能的是,它会被锁定,但如果由于某种原因它被锁定了怎么办?那你就有麻烦了。正如有人指出的那样,不检查 return 代码是非常成功和有希望的情况。
很简单,我想删除一个可能存在也可能不存在的文件。仅使用 remove(filename) 并忽略 return 值是不好的做法吗?
编辑:通过删除,我指的是 this
您问题的答案实际上取决于您的程序,您提供的 link 非常有帮助。如果你的程序很简单,我不会这样做,但如果你的程序很重要,我会检查值,就像 cpluslplus.com 那样,因为你 always 应该检查 return 值。不这样做是不好的,因为这就像在说:"I won't check the return value to this function, and intentionally not cover all possibilities."
一旦你不能为
锁定文件系统- 检查文件是否存在
- 删除它
您无法保证在 1
之后检查文件没有被另一个进程删除。
所以你应该:
- 调用
remove
函数 - 获取返现值
- 检查是否有错误
- [使用
perror
调用显示错误文本]
Should I check whether a file exists before deleting it?
没有这样的要求或需要,这样做是没有任何用处的。
and ignore the return value?
通常,用户可能想知道文件是否被删除,因此忽略 return 值通常是个坏主意。此外,用户可能还想知道为什么 文件没有被删除(参见std::perror
)。
C++ Should I check whether a file exists before deleting it?
可以,但是您应该永远不要依赖代码中的结果。您可以在您的代码和可能竞争同一文件的其他 threads/applications 之间引入竞争条件。考虑以下因素:
- 应用程序 #1 检查
foo.txt
是否存在。结果为真。 - 应用程序 #2 检查
foo.txt
是否存在。结果为真。 - 应用程序 #1 删除
foo.txt
。成功! - 应用程序 #2 删除
foo.txt
。哎呀!
Is it bad practice to just use remove(filename)...
不,一点也不。
...and ignore the return value?
唯一一次您想忽略系统调用的 return 代码是当您 真的 不关心结果时,这确实非常罕见.删除文件时,应该记录return值,然后if/when文件无法删除(例如权限问题,已删除等)您可以通知用户操作失败或记录它用于调试目的。
这是一个很难回答的问题。如果您不关心文件是否真的被删除,但无论如何,请忽略 return 值。如果不检查 return 值,则无法保证文件是否已被删除。最有可能的是,它会被锁定,但如果由于某种原因它被锁定了怎么办?那你就有麻烦了。正如有人指出的那样,不检查 return 代码是非常成功和有希望的情况。