【问题标题】:FileStream.Write not Writing to FileFileStream.Write 不写入文件
【发布时间】:2009-11-09 22:59:15
【问题描述】:

我正在通过 WCF 传递一些 Base64 编码的字符串,并且我正在尝试将它们写入文件。然而,尽管我的 FileStream 对象的 Length 大于 0,但我在磁盘上的文件仍然是空的。

FileStream fs = new FileStream(Config.Instance.SharedSettings.SaveDir + StudyInstance.StudyId + "\\tmp.ext", FileMode.Create);

EncodeBlock eb = new EncodeBlock();

while (eb.Part != eb.OfParts || eb.OfParts == 0)
{
    eb.ToDecode = ps.StudyService.GetInstancePart(StudyInstance, s, eb.Part+ 1, Config.Instance.ClientSettings.AppData);
    eb = Base64Encoder.Decode(eb);
    fs.Write(eb.ToEncode, 0, eb.ToEncode.Length);
}

fs.Close();

eb.ToEncode 的长度始终大于 0,fs.Length 始终大于 0,但我的 "tmp.ext" 文件已创建,但仍为空。 fs.CanWrite 也总是如此。

【问题讨论】:

  • 如何验证文件是否为空?
  • 这可能看起来很简单,但是您是否调试过代码以确保您确实进入了 WHILE 块?
  • 这很简单。最终的解决方案是让我查看正确目录的 "tmp.ext" 文件...不要问,这是其中的一个日子,但感谢大家的帮助!
  • 稍微相关,您可能需要考虑使用 Path.Combine 而不是简单的字符串连接来创建文件名。在这种情况下,它会使您的代码更长,但也会使代码更能代表您的意图。

标签: c# file filestream


【解决方案1】:

您是否尝试过调用 FileStream.Flush?

在关闭流之前调用它。

您还应该使用“使用”语句来确保清理流。

【讨论】:

  • 我的理解是关闭 FileStream 会自动刷新缓冲区。 using 声明你是对的
猜你喜欢
  • 1970-01-01
  • 2010-11-17
  • 2015-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-02
  • 2020-09-29
  • 2016-11-03
相关资源
最近更新 更多