2012-04-25 244 views
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我要救它。 我点击保存按钮,然后我转到该雇员列表并且不保存 。

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

回答

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()); 
    } 
} 

,如果不存在,这将创建文件,或如果有的话附加到它。

+0

看起来你正在解决@shan没有的问题。如果文件已经存在,他不会问如何追加。他的文件根本就没有创建,这就是问题 – 2012-04-25 19:45:11

+0

@Shedal他的确要求追加到文件中......“不截断当前内部的值” – Rudu 2012-04-25 19:59:01

+0

@Rudu但这不是他坚持的问题。这不是他要我们帮助他的。 – 2012-04-25 20:01:22

-1

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

  • 如果您在文本框中放置完整路径,该文件是否保存在适当的位置?如果是这样,也许这是意图。
  • 如果用户没有放入完整路径,您是否有办法让它成为一个(例如,刚开始时粘贴C:\)?或者至少可以告诉何时没有完整的路径并拒绝请求?
+0

OP说在问题中的路径是C:\ employess \ employeelist.txt。 – 2012-04-25 19:34:07

+0

那么它并不重要,用户想要保存它在哪里可以保存到和E驱动器是由用户决定的。并且路径假设是绝对路径而不是相对路径。但是路径是用户想要的。如果这对你有意义。 – shan 2012-04-25 19:34:52

+0

以及C:\ employess \ employeelist.txt的路径确实存在。 – shan 2012-04-25 19:55:43

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)

您可能还需要在最后追加一个空行,这样就进一步节省了你可以告诉它是追加,而不是一个长长的清单(取决于你的课程需要)

+1

由于shan代码中的'using'指令,FileStream的'Dispose()'方法将被调用。所以流**将被关闭。 – 2012-04-25 19:48:33

0

与开始.NET框架4,你可以做这样的:

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

当然,你可能会想增加一个检查有一个有效的路径和字符串的有效枚举。