文件流写入缓冲区到文件

3

我正在尝试通过一个需要文件参数的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个回答

5
您当前正在刷新f,但未刷新s。您正在刷新FileStream,但StreamWriter对其进行了包装,因此它可以轻松拥有自己的缓冲区。不要忘记,FileStream不知道任何关于StreamWriter的信息-关系是另一种方式。
说实话,上传文件之前关闭StreamWriter并不清楚。我会直接使用:
File.WriteAllText(path, someString);
// Upload it now

如果你确实想使用FileStreamStreamWriter,我强烈建议你使用using语句来代替手动关闭文件流。


我可以直接关闭StreamWriter。 - Alex78191

2

也试试这个。

 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
                }
            }

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