【问题标题】:How to delete a file while it is attached to a stream如何在文件附加到流时删除文件
【发布时间】:2023-04-04 12:40:01
【问题描述】:

我开发了一个 UDP 客户端控制台应用程序来检索数据包数据并将它们写入文本文件。我一直在使用流将数据写入文本文件。由于全天都在写入文本文件,因此无法处理流。这些文件是每天生成的,我需要删除前几天写的文本文件。但无法删除文件;有一条错误消息指出该文件已被另一个进程使用。尽管目前尚未实际写入前一天的文件,但它们似乎仍附加到流中。由于我无法处理或关闭流,是否有可能删除附加到特定进程的旧文本文件?谢谢你。

【问题讨论】:

  • 是什么阻止了您在当天写完数据流后处理流?
  • @Baldrick - 它与项目的整体功能有关。我在文本文件中写入加密数据并通过单独的 Windows 窗体应用程序将它们解密回来。加密和解密过程都使用相同的加密密钥,为了保持过程一致,我必须保持相同的流。正如您所建议的那样,我试图在一天结束时处理流,但它通过导致损坏(解密)的数据影响解密过程。谢谢。
  • 您似乎遇到了一个设计问题,您正试图通过一种不明智的方式来解决问题。我强烈建议重新设计您的加密机制,以便您能够正确清理文件流。如果一个文件以这种方式被锁定,windows 不会让你删除它。

标签: c# io stream udp delete-file


【解决方案1】:

您似乎没有正确处理您的信息流。他们在记忆中仍然“活着”。你应该弄清楚是什么让你的流不被垃圾收集。例如,您可以通过在全局属性(或更好的管理器)中保留对所有流的引用以及创建它的DateTime 时间戳来做到这一点。这样,通过检查时间戳,您可以确定哪些流可以关闭。确保您同时关闭dispose您的信息流。

请注意,流是昂贵的资源,应尽量减少使用量。

【讨论】:

  • Wicher Visser 和 Baldrick - 感谢您的支持。我不得不更改使用线程的设计,并且能够安全地处理流而不影响解密过程。
猜你喜欢
  • 1970-01-01
  • 2022-11-21
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 2017-03-31
  • 1970-01-01
  • 2018-06-25
相关资源
最近更新 更多