- 确保我想要操作的文件夹或文件的最简单方法是什么(不是只读的)?
- 我知道我可以使用ACL来添加/设置条目(使文件/文件夹不可读),但我怎么知道是否需要使用安全权限来确保文件访问?或者我可以将其添加为额外的度量并处理异常/否定场景吗?
- 我如何知道何时关闭或只是刷新流?例如,我应该尝试在方法中使用一次流,然后在末尾冲洗/关闭/ dipose?如果我使用dispose(),我还需要显式调用flush()和close()吗?
我问这个问题是因为不断确保文件可用是一个核心要求,但很难保证这一点,因此我的代码设计中的一些提示会很好。
由于
答案 0 :(得分:1)
无法保证对文件的访问权限。我知道这不是一个受欢迎的反应,但它是100%真实的。即使您在Win32计算机上打开了独占非共享,也永远无法保证对文件的访问。
有太多方法可以让你无法控制失败。典型的例子是通过网络打开的文件。以任何方式打开任何帐户,我只需走过去拉网线。这将终止您对该文件的访问。
我不是说这是卑鄙的或傲慢的。我这样说是为了确保人们明白在文件系统上运行是一项非常危险的操作。您必须接受该操作可能会失败。对于任何接触磁盘的操作,都必须有一个备用方案。
答案 1 :(得分:0)
- 确保我想要操作的文件夹或文件的最简单方法是什么(不是只读的)?
以写模式打开它们?
答案 2 :(得分:0)
尝试将新文件写入文件夹并捕获任何异常。与此同时,存在文件夹/文件等通常的健全性检查等。
您永远不应该更改代码中的文件夹安全性,因为环境可能会彻底改变并导致严重的问题。而是确保安全性得到充分记录并事先进行配置。或者在您自己的代码中使用模拟,以确保您始终以具有文件夹/文件的完全权限的用户身份运行所需的代码。
除非您别无选择,否则请勿调用Dispose()。在关闭文件之前或者要将流的内容提交到文件/磁盘时,始终刷新。何时执行此操作取决于需要写入的数据量以及写入数据所需的时间。
答案 3 :(得分:0)
确保文件夹可写的100%万无一失的方法 - 创建文件,关闭文件,验证文件夹是否存在,然后将其删除。有点乏味,但你要求万无一失=)
如果您无法写入文件,那么更好的选择就是处理各种例外情况。
另外,我总是明确地调用Close,除非我在写完之前需要从文件中读取(在这种情况下我调用flush然后关闭)。
答案 4 :(得分:0)
此外,Dispose在关闭句柄之前刷新数据,因此不需要显式调用flush(尽管最好频繁刷新,具体取决于您正在处理的数据量和类型)。
如果你正在对文件进行相对原子操作而不需要长时间运行的句柄,那么“使用”范例对于确保正确处理文件非常有用,例如:
using (StreamReader reader = new StreamReader("filepath"))
{
// Do some stuff
} // CLR automagically handles flushing and releasing resources