Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法访问已打开和关闭的文件_C#_File - Fatal编程技术网

C# 无法访问已打开和关闭的文件

C# 无法访问已打开和关闭的文件,c#,file,C#,File,通过我的应用程序,我打开一个文本文件,读取它,然后关闭它。 然后,手动访问该文件受到限制。 我如何解决它 这是我的密码: fs = new FileStream(@"C:\Weather\somePlace.json", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); using (StreamReader streamReader = new StreamReader(fs)) { String response

通过我的应用程序,我打开一个文本文件,读取它,然后关闭它。 然后,手动访问该文件受到限制。 我如何解决它

这是我的密码:

fs = new FileStream(@"C:\Weather\somePlace.json", FileMode.Open, FileAccess.Read,  FileShare.ReadWrite);
using (StreamReader streamReader = new StreamReader(fs))      
{
    String responseData = streamReader.ReadToEnd();   

    //Deserialize the json output
    var outObject = JsonConvert.DeserializeObject<RootObject>(responseData);

    // do something with the information

    fs.Close();
    fs = null;
}
谢谢

由于FileStream是可识别的,因此应该在使用后将其释放

因此,请将其包装到使用中,以确保文件将被发布:

using(fs = new FileStream(@"C:\Weather\somePlace.json", FileMode.Open, FileAccess.Read,  FileShare.ReadWrite))
{
   // the rest of your code
}

实际上,您不需要文件流。您只需使用以下功能:

using (StreamReader streamReader = new StreamReader(@"C:\Weather\somePlace.json"))      
{
    String responseData = streamReader.ReadToEnd();   

    //Deserialize the json output
    var outObject = JsonConvert.DeserializeObject<RootObject>(responseData);

    // do something with the information
}

手动访问是指从文件资源管理器中访问?“FileAccess.ReadWrite”?@aloisdg他只需要读取它。这不是必需的,因为StreamReader是使用包装的。这将负责处理底层流。@SriramSakthivel查看StreamReader源代码,可以通过Reflector或其他.NET反编译工具获得。可以清楚地看到,在StreamReader中。Dispose stream只被关闭,而Dispose并没有为stream调用。是的,非常正确。它调用Close,您是否检查了Close的功能?它立即调用Disposetrue。所以,你的回答对我没有任何帮助。@SriramSakthivel哦,你说得对。我错过了一个事实,那就是近距离的流处理。