C# - 使用文件流写入文件
C# - Writing to file with filestream
这是使用 Filestream 的正确方法吗?
如果是这样,这个功能有什么我可以改进的吗?
它的主要计划是用于写入一个ftp文件夹,包含600多行数据。
我担心的是 for 循环。
这是我第一次使用 C# 工作。所以我可以使用建议。
private void button3_Click(object sender, EventArgs e)
{//FINISH BUTTON
if (string.IsNullOrEmpty(FilePathBox.Text) || string.IsNullOrEmpty(FileNameBox.Text))
{
MessageBox.Show("Please check folderpath or filename.",
"WARNING");
}
else
{
String vFullPath = FilePathBox.Text + "/" + FileNameBox.Text + ExtentionBox.Text;
MainProgressBar.Maximum = OutputBox.Items.Count;
using (FileStream fs = File.Create(vFullPath))
{
for (int i = 0; i < OutputBox.Items.Count; i++)
{
//String vInput = OutputBox.Items[i].ToString() + "\n";
//File.AppendAllText(vFullPath, vInput);
String vInput = OutputBox.Items[i].ToString() + "\n";
byte[] vData = new UTF8Encoding(true).GetBytes(vInput);
fs.Write(vData, 0, vData.Length);
MainProgressBar.Value = i;
}
}
MainProgressBar.Value = MainProgressBar.Maximum;
MessageBox.Show("Finished Writing to file.",
"Completed");
}
}
一种更典型的方法是将流包装在 StreamWriter 中,这有 write methods 字符串,无需将所有内容转换为字节。您可以 select 构造函数中的编码。还有一个用于写入二进制数据的BinaryWriter。
循环写入数据没有问题。您也许可以使用 String.Join
在内存中创建一个完整的字符串,然后使用 File.WriteAllLines
,但我不希望获得太多。
我报告进度的首选方法是 运行 使用 Task.Run
在后台线程上工作,设置一个 属性 描述共享对象中的进度,并创建一个计时器在轮询 属性 并更新 progress-bar 的 UI 线程上。这有助于确保 UI 响应迅速。
我也会考虑使用某种序列化库,例如 json.net。这极大地简化了将对象转换为文件并再次返回的过程。但它与日志记录之类的事情不太相关。
这是使用 Filestream 的正确方法吗? 如果是这样,这个功能有什么我可以改进的吗? 它的主要计划是用于写入一个ftp文件夹,包含600多行数据。
我担心的是 for 循环。
这是我第一次使用 C# 工作。所以我可以使用建议。
private void button3_Click(object sender, EventArgs e)
{//FINISH BUTTON
if (string.IsNullOrEmpty(FilePathBox.Text) || string.IsNullOrEmpty(FileNameBox.Text))
{
MessageBox.Show("Please check folderpath or filename.",
"WARNING");
}
else
{
String vFullPath = FilePathBox.Text + "/" + FileNameBox.Text + ExtentionBox.Text;
MainProgressBar.Maximum = OutputBox.Items.Count;
using (FileStream fs = File.Create(vFullPath))
{
for (int i = 0; i < OutputBox.Items.Count; i++)
{
//String vInput = OutputBox.Items[i].ToString() + "\n";
//File.AppendAllText(vFullPath, vInput);
String vInput = OutputBox.Items[i].ToString() + "\n";
byte[] vData = new UTF8Encoding(true).GetBytes(vInput);
fs.Write(vData, 0, vData.Length);
MainProgressBar.Value = i;
}
}
MainProgressBar.Value = MainProgressBar.Maximum;
MessageBox.Show("Finished Writing to file.",
"Completed");
}
}
一种更典型的方法是将流包装在 StreamWriter 中,这有 write methods 字符串,无需将所有内容转换为字节。您可以 select 构造函数中的编码。还有一个用于写入二进制数据的BinaryWriter。
循环写入数据没有问题。您也许可以使用 String.Join
在内存中创建一个完整的字符串,然后使用 File.WriteAllLines
,但我不希望获得太多。
我报告进度的首选方法是 运行 使用 Task.Run
在后台线程上工作,设置一个 属性 描述共享对象中的进度,并创建一个计时器在轮询 属性 并更新 progress-bar 的 UI 线程上。这有助于确保 UI 响应迅速。
我也会考虑使用某种序列化库,例如 json.net。这极大地简化了将对象转换为文件并再次返回的过程。但它与日志记录之类的事情不太相关。