以下引发异常" The process cannot access the file 'D:\MyDir\First.txt' because it is being used by another process."
static void Main(string[] args)
{
Directory.CreateDirectory(@"D:\MyDir");
File.Create(@"D:\MyDir\First.txt");
File.WriteAllText(@"D:\MyDir\First.txt", "StackOverflow.com");
}
Run Code Online (Sandbox Code Playgroud)
以下作品:
using (File.Create(@"D:\MyDir\First.txt"))
{
}
Run Code Online (Sandbox Code Playgroud)
要么
File.Create(@"D:\MyDir\First.txt").Close();
Run Code Online (Sandbox Code Playgroud)
为什么?什么File.Create需要关闭?
Dav*_*vid 45
File.Create比你想象的要多得多.它不仅仅是创建文件,它还将活动流返回到文件.但是,您没有对该流做任何事情.using后一个示例中的块通过处理它来关闭该流.
另请注意,这是关于返回值的重要线索:
File.Create(@"D:\MyDir\First.txt").Close();
Run Code Online (Sandbox Code Playgroud)
(当我第一次阅读你的问题时,这对我来说实际上并不直观,但回过头来看,这行代码实际上就说明了这一切.)
你的下一步,打电话File.WriteAllText也比你想象的要多.根据文件,它:
创建一个新文件,将指定的字符串写入该文件,然后关闭该文件.
所以看起来你的File.Create电话似乎并不是真正需要的.
Dan*_*plo 10
File.Create()的MSDN文档解释了这一点:
此方法创建的FileStream对象的默认FileShare值为None; 在原始文件句柄关闭之前,没有其他进程或代码可以访问创建的文件.
基本上,在文件创建关闭之前,文件无法被另一个进程访问(在这种情况下,您尝试写入该文件).
Kev*_*Kev 10
你实际上不需要打电话File.Create()就可以打电话File.WriteAllText().
File.WriteAllText() 将创建一个新文件并写入它然后用一个方便的方法关闭文件.
如果该文件已存在,则将被覆盖.
File.Create(string)返回一个保持文件打开的FileStream对象.即使您没有在变量中保留对FileStream对象的引用,它仍然存在.该对象可以进行垃圾收集,当发生这种情况时,文件将被关闭,但是没有预测垃圾收集何时发生.
| 归档时间: |
|
| 查看次数: |
8694 次 |
| 最近记录: |