不使用“保存文件”对话框保存文件

本文关键字:保存文件 对话框 | 更新日期: 2023-09-27 18:32:26

我仍在做这个项目,但我遇到了一个问题。好吧,这就是我需要做的。

当用户单击"保存"按钮时,将所选记录写入 在 txtFilePath 中指定的文件(绝对路径不是相对的),没有 截断当前内部的值并处理出现的任何异常。

好的,这是我的代码:

 private void Save_Click(object sender, EventArgs e)
    {
        string filePath = txtFilePath.Text;
        if (!File.Exists(filePath))
        {
            FileStream fs = File.Create(filePath);
            fs.Close();
        }
        using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
        {
            using (StreamWriter sw = new StreamWriter(fs))
            {
                foreach (string line in employeeList.Items)
                {
                    sw.WriteLine(line);
                }
            }
        }
            }

现在,当我进入我的程序并想从 employeelist.text 中保存某些内容时,它没有保存到我保存它的位置。我不知道我的代码中是否缺少某些内容或什么,但它不会保存。下面是一个示例:

我在员工列表和文本框中将人名添加到此列表中 I 有一个名为 C:''employess''employeelist 的文件.txt我想把它保存到。 我单击保存按钮,然后转到该员工列表,但它不是 得救。

我不知道我做错了什么,我一直在网上寻找解决方案,但我还没有找到任何东西。谢谢

不使用“保存文件”对话框保存文件

需要仔细检查的一些事项:

  • 确保在测试时没有打开员工列表.txt文件
  • 确保文件名中没有无效字符
  • 确保应用程序有权将文件保存到指定的位置
  • 使用调试器单步执行代码并查找吞噬的异常 - 必须有未创建文件的原因。
  • 检查您的Save_Click事件是否连接到您的按钮 - 您的示例中的代码是否正在运行?

检查这些内容后,您可能需要按照以下示例了解项目的创建与追加要求:

string path = txtFilePath.Text;
// This text is added only once to the file.
if (!File.Exists(path)) 
{
    using (StreamWriter sw = File.CreateText(path)) 
    {
        foreach (var line in employeeList.Items)
            sw.WriteLine(line.ToString());
    }   
} 
else 
{
    using (StreamWriter sw = File.AppendText(path)) 
    {
        foreach (var line in employeeList.Items)
            sw.WriteLine(line.ToString());
    }
}
如果文件不存在,这将创建该文件,

如果存在,这将附加到该文件。

检查文件是否存在然后创建它有点没有必要,因为这都可以由 StreamWriter/FileStream 部分处理。 所以你上面的函数可以简化为以下内容:

public void Save_Click(object sender, EventArgs e)
{
    StreamWriter file = 
      new StreamWriter(txtFilePath.Text, true);//Open and append
    foreach (object item in employeeList.Items) {
       file.WriteLine(item.toString());
    }
    file.Close();
}

[更新]

txtFilePath有哪些类型,前者employeeList建议它是一个文本框,后者建议它可能绑定到非 GUI 元素?(摇摆)

您可能还想在末尾附加一个空行,以便在进一步保存时您可以分辨出它是一个附加而不是一个长列表(当然取决于您的需要)

从 .Net Framework 4 开始,你可以这样做:

private void Save_Click(object sender, EventArgs e)
{
        File.AppendAllLines(txtFilePath.Text, employeeList.Items);
}

当然,您可能希望添加检查以获得有效的路径和有效的字符串枚举。

如果路径看起来像一个相对路径(即不以驱动器号开头),那么它将以这种方式解释。

  • 如果在文本框中放置完整路径,文件是否会保存在正确的位置? 如果是这样,也许这就是本意。
  • 如果用户没有输入完整路径,您是否有办法使其成为完整路径(例如,只需粘贴 C:''一开始)? 或者至少你能知道什么时候没有完整的路径,并拒绝请求?