FileStream将缓冲区写入文件

时间:2015-05-11 16:52:18

标签: c# filestream streamwriter

我正在尝试通过将File作为参数的API上传.srt文件。

该文件存储在服务器上,我正在使用FileStreamStreamWriter写入该文件:

string path = Server.MapPath("~/App_Data/captions/" + entryId) + ".srt";
FileStream f = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite);
StreamWriter s = new StreamWriter(f);

s.Write(someString);
f.Flush()

// Connecting to API and uploading the file

s.Close();

但是,即使在我的服务器上正确创建了文件,上传的文件也是空的。如果该文件已存在,它将正确上传该文件,但仅包含现有内容,而不是我从someString添加的其他文本。

我认为f.Flush()会确保StreamWriter中的数据被写入并保存到文件中,但似乎并非如此。

在通过API上传数据之前,我需要做些什么来确保数据写入文件?

2 个答案:

答案 0 :(得分:5)

您目前正在刷新f,但不会s。您正在刷新FileStream,但StreamWriter 包裹,因此它可以轻松拥有自己的缓冲区。不要忘记FileStreamStreamWriter一无所知 - 这种关系是相反的。

在您关闭 StreamWriter之前,不清楚为什么要上传文件,说实话。我会用:

File.WriteAllText(path, someString);
// Upload it now

如果您 肯定想要使用FileStreamStreamWriter,我强烈建议您使用using语句而不是手动关闭内容,也是......

答案 1 :(得分:1)

试试这个。

 string path = Server.MapPath("~/App_Data/captions/" + entryId) + ".srt";
            using (FileStream f = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite))
            {
                using (StreamWriter s = new StreamWriter(f))
                {
                    s.Write("someString");
                    f.Flush();
                    // Connecting to API and uploading the file
                }
            }