3

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

当用户单击“保存”按钮时,将所选记录写入 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 中保存一些未保存到我保存位置的内容时。我不知道我是否在我的代码中遗漏了一些东西,但它不会保存。这是一个例子:

我在employeelist 中的这个列表中添加了一个人名,在文本框中我有一个名为C:\employess\employeelist.txt 的文件,我想将它保存到。我单击保存按钮,然后转到该员工列表,但它没有被保存。

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

4

4 回答 4

3

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

  • 确保在测试时没有打开 employeelist.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());
    }
}

如果文件不存在,这将创建文件,如果存在,则附加到它。

于 2012-04-25T19:42:09.120 回答
1

检查文件是否存在然后创建它有点不必要,因为这都可以由 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 元素?(摇摆)

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

于 2012-04-25T19:47:04.247 回答
0

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

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

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

于 2012-09-25T22:44:16.153 回答
-1

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

  • 如果您在文本框中输入完整路径,文件是否会保存在正确的位置?如果是这样,也许这就是本意。
  • 如果用户没有输入完整路径,你有没有办法让它成为一个(例如,只是在开头粘贴 C:\)?或者至少你能知道什么时候没有完整的路径,然后拒绝请求?
于 2012-04-25T19:32:33.660 回答