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。这极大地简化了将对象转换为文件并再次返回的过程。但它与日志记录之类的事情不太相关。