我正在尝试通过将File作为参数的API上传.srt文件。
该文件存储在服务器上,我正在使用FileStream
和StreamWriter
写入该文件:
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上传数据之前,我需要做些什么来确保数据写入文件?
答案 0 :(得分:5)
您目前正在刷新f
,但不会s
。您正在刷新FileStream
,但StreamWriter
包裹,因此它可以轻松拥有自己的缓冲区。不要忘记FileStream
对StreamWriter
一无所知 - 这种关系是相反的。
在您关闭 StreamWriter
之前,不清楚为什么要上传文件,说实话。我会用:
File.WriteAllText(path, someString);
// Upload it now
如果您 肯定想要使用FileStream
和StreamWriter
,我强烈建议您使用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
}
}