【问题标题】:File.Create Async write keeps the file lockedFile.Create 异步写入保持文件锁定
【发布时间】:2015-06-03 17:34:57
【问题描述】:

我需要每半秒以异步方式编写一个文件。而且我只能在 .Net Framework 2.0 上使用 C#

我尝试使用File.CreateBeginWrite。但它使文件保持锁定状态,我需要能够访问它(读取)。我试着摆弄安全设置,但我不确定我在做什么。

感谢任何帮助!

编辑:

var bytes = Encoding.ASCII.GetBytes(stringBuilder.ToString());
var filePath = Path.Combine(OUTPUT_FOLDER, FILE_NAME);
var fileSteam = File.Create(filePath, bytes.Length, FileOptions.Asynchronous);
m_IAsyncResult = fileSteam.BeginWrite(bytes, 0, int.MaxValue, WriteCallback, new State(fileSteam));

private void WriteCallback(IAsyncResult ar) {
    var state = (State)ar.AsyncState;
    var stream = state.Stream;
    stream.EndWrite(ar);

    m_IAsyncResult = null;
}

【问题讨论】:

  • 我们需要查看您的代码,但这通常表明您没有在某处关闭流。
  • 你用什么代码来阅读它?我假设正在阅读? msdn.microsoft.com/en-us/library/…
  • 嘿,我已经在原帖中添加了我的代码,谢谢!
  • @WilliamXifaras 我在打开或复制窗口的情况下阅读它,而不是使用代码(还)
  • 您是否尝试过使用线程和同步 IO?这在 .NET 2.0 上要容易得多。

标签: c# asynchronous file-io


【解决方案1】:

您需要确保文件以非独占方式打开。查看此帖子How can I read a text file without locking it?

【讨论】:

  • 嘿,我试图用windows打开或复制它,而不是用代码
【解决方案2】:

如果您可以使用File.WriteAllTextFile.AppendAllText,两者都会为您处理打开和关闭,以便您稍后再次阅读而不会出现问题。

【讨论】:

    猜你喜欢
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多