当前位置: 首页 > 知识库问答 >
问题:

流关闭后文件保持锁定

商池暝
2023-03-14

我有一些代码,正在尝试从一个可能或可能没有加密的文件读取。如果它是加密的,那么它在实际数据之前有一个包含几个字节信息的头。访问该文件的逻辑如下所示:

bool encrypted = IsEncryptedFile(fileName);
Stream s = null;

if (encrypted)
{
    s = new EncryptedStreamReader(fileName);
}
else
{
    s = new StreamReader(fileName);
}

// Read from s

我的问题是:

我的假设是否正确,即关闭文件然后立即打开文件的代码可能会收到此错误,因为Windows仍在释放它,即使.NET Stream.Close方法调用已返回(或using块已退出)?

有没有比延长重试间隔更不垃圾的方法呢?

private bool IsEncryptedFile(string fileName)
{
    using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
    {
        //Read header from fileStream
        //Returns true if encrypted else false
    }
}

共有1个答案

窦华晖
2023-03-14

确保使用using和try finally子句处理流是正确的。

此外,还可以使用FileStream设置文件访问选项。

例:

bool encrypted = IsEncryptedFile(fileName);
Stream s = null;
try
{
    if (encrypted)
    {
        s = new EncryptedStreamReader(fileName);
    }
    else
    {
        s = new FileStream(fileName, FileMode.Open, FileAccess.Read);
    }

    // Read from s
}
finally
{
    if (s != null)
        s.Close();
}
 类似资料:
  • 我有一个windows服务,它可以动态地将PDF合并在一起,然后将它们移动到另一个位置。在大多数情况下,我无法控制某人想要合并什么。有时会处理损坏的PDF,因此创建新的PdfDocument会抛出PDFEException“Traile not found”。我捕获了异常并关闭了文档,但在关闭PDF之后,它仍然以某种方式被锁定。我需要删除该目录,但在尝试这样做时,它会引发IOException并使

  • 想改进这个问题吗 通过编辑此帖子,添加详细信息并澄清问题。 我想进行联调。我目前的方法: 我放置了@AutoConfigreMockMvc,但MockMvc对象仍然为空

  • 我在Jpa存储库中使用Spring Boot。我在循环中保存一些记录,在保存所有记录后,会打印下面的异常。 JAVAsql。SQLRecoverableException:oracle的Instruço Fechada。jdbc。驾驶员OracleClosedStatement。oracle上的getMaxRows(OracleClosedStatement.java:3578)~[ojdbc6-

  • 问题内容: 我是python的新手,到目前为止,我爱ipython笔记本进行学习。我是否使用to_csv()函数将pandas数据帧写出到文件中。我想打开csv来查看它在excel中的外观,并且只能以只读模式打开,因为它仍在被另一个用户使用。如何关闭文件? 这将写出文件没有问题,但是当我在excel中“检查”它时,我得到了只读警告。这也给我提出了一个更大的问题。有没有办法查看python当前正在使

  • 每次我在模拟器中运行我的应用程序时,都会打开控制台的调试区。我不是很喜欢它,因为它是唯一的垃圾邮件。我想看到这一点,如果错误,或者如果我自己打开它。我检查了Xcode的偏好设置,并尝试在谷歌上搜索,但什么也没找到。

  • 问题内容: 假设我有一个Java8 ,并且使用了该流,那么如何控制流中使用的s 的关闭? 请注意,我可能无权访问个人,例如: 在进行了其他一些映射等之后,我终于在续集中失去了。 我首先认为垃圾收集器可以在需要时执行此操作,但是当它很长时,我已经经历了OS描述符耗尽。 问题答案: 关于使用FileReader的一般注意事项:FileReader在内部使用FileInputStream,它会覆盖并且因