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

时间:2012-04-25 19:26:55

标签: c#

我正在研究这个项目,我遇到了一个问题。那么这就是我需要做的事情。

  

当用户单击“保存”按钮时,将所选记录写入   没有在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);
                }
            }
        }
            }

现在,当我进入我的程序并希望保存来自employeeselist.text的东西时,它没有被保存到我保存的地方。我不知道我的代码中是否遗漏了什么,或者它不会保存。这是一个例子:

  

我在employeeelist和文本框I中为此列表添加了一个人名   有一个名为C:\ employess \ employeelist.txt的文件我想将其保存到。   我点击保存按钮,然后我去找那个员工,但事实并非如此   被救了。

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

4 个答案:

答案 0 :(得分: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());
    }
}

如果文件不存在,则会创建该文件,如果存在则会附加到该文件。

答案 1 :(得分: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();
}

[更新]

txtFilePathemployeeList有哪些类型,前者表明它是一个文本框,后者表明它可能绑定到非GUI元素? (WAG)

您可能还想在末尾添加一个空行,以便在进一步保存时您可以告诉它是一个附加而不是一个长列表(根据您的需要而定)

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:-1)

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

  • 如果您在文本框中输入完整路径,文件是否会保存在正确的位置?如果是这样,也许这就是预期的目的。
  • 如果用户没有填写完整路径,您是否有办法将其设置为一个(例如,只是在开头粘贴C:\)?或者至少可以告诉我什么时候没有完整路径,并拒绝请求?