2016-01-24 73 views
0

我做了这个小程序,演示了我的问题。它创建该文件,然后尝试在相同的地址打开它。当它尝试打开文件时,会引发路径上的IOException共享冲突。为什么会发生?我可以看到该文件正在创建。C#创建和打开文件隔离抛出IOException

using System; 
using System.IO; 

namespace FileTestProject 
{ 
class MainClass 
{ 
    private static string address = "/Users/jamessullivan/Desktop/testFile.dat"; 

    public static void Main() 
    { 
     File.Create(address); 
     FileStream file = File.Open(address, FileMode.Open); 
    } 
} 
} 

回答

1

你可以看到问题寻找到文档。

虽然你的例子没有意义,但下面是对问题的解释。

Create.File(string)返回FileStream它包含称为文件句柄的非托管资源,因此您不能创建另一个FileStream哪个应该保持相同的句柄。

你应该在重用之后释放资源。

这是一个简单consept:

using(File.Create(address)) 
{} 

using(FileStream file = File.Open(address, FileMode.Open) 
{ 
} 
+1

为什么两个步骤?只需使用File.Create一次。 – usr

+0

我的错误是没有看到File.Create返回文件,它需要关闭,但保持打开状态。使用关键字使用或存储引用到变量中并调用file.Close()修复了问题。谢谢 – j76goatboy

+0

@usr,我刚才提到'虽然你的例子没有意义。但是,正如OP所说,“这个能够证明我的问题的小程序”在真正的问题中可能是一个有意义的流程。 –