FileStream.Write没有写入文件

3

我正在通过WCF传递一些Base64编码的字符串,并尝试将它们写入文件。然而,尽管我的FileStream对象的长度大于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();
< p > eb.ToEncode 的长度始终大于0,fs.Length 始终大于0,但是我的"tmp.ext"文件被创建了,但保持为空。 fs.CanWrite 也始终为真。


1
你如何验证文件是否为空? - Lasse V. Karlsen
1
这似乎是一个不言而喻的问题,但你是否调试了代码以确保你实际进入了 WHILE 块? - Sonny Boy
这真是太容易了。最终的解决办法是让我查看正确目录下的"tmp.ext"文件...别问我为什么,今天就是那种日子,但感谢大家的帮助! - Nathan Wheeler
2
在某种程度上相关,您可能希望考虑使用Path.Combine而不是简单的字符串连接来创建文件名。在这种情况下,它会使您的代码变得更长,但也会使代码更能代表您的意图。 - Kennet Belenky
2个回答

8

你尝试过调用FileStream.Flush吗?

在关闭流之前调用它。

你还应该使用"using"语句来确保流被清理。


据我所知,关闭FileStream会自动刷新缓冲区。你对using语句的理解是正确的。 - Nathan Wheeler

-1

你可以尝试一下

var streamBytes = myMemoryStream.ToArray();
File.WriteAllBytes(myFilePath, streamBytes);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接