2012-04-25 180 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); 
} 

當然,你可能會想增加一個檢查有一個有效的路徑和字符串的有效枚舉。