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哦,你说得对。我错过了一个事实,那就是近距离的流处理。