2016-01-07 50 views
0

我正在編寫一個程序,其中有兩個具有相同數據的列表框,但一個列表框項目更新時帶有學生姓名和他們的總分數,另一個與學生一起更新姓名和學生姓名旁邊的每個個人評委分數。一切都很好,但現在我卡住了...我有兩種方法Save()和SaveAs()其中Save()自動將數據寫入「FormData.bin」並且SaveAs()允許用戶輸入自己的文件名。將新數據添加到當前打開的文件的方法C#

是否可以重新編寫Save()方法,這樣當我單擊保存時,它將當前數據保存到在MS Word中打開的文件中,當您在文檔中輸入時只需單擊保存即可添加新文件鍵入數據到當前文件。這是我寫的Save()方法。

public void SaveEntry() 
    { 
     int itemsCount = Math.Min(lstbxStudents.Items.Count, lstbxStudentScore.Items.Count); 
     saveFileDialog1.InitialDirectory = Application.StartupPath; 
     saveFileDialog1.FileName = "FormData.bin"; 

     { 
      try 
      { 
       using (FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.Create)) 
       using (BinaryWriter Save = new BinaryWriter(fs)) 
       { 
        Save.Write(cmbbxAge.Text); 
        Save.Write(cmbbxBelt.Text); 
        Save.Write(cmbbxCategorie.Text); 
        Save.Write(cmbbxGender.Text); 
        Save.Write(cmbbxGup.Text); 
        Save.Write(txtJudge1.Text); 
        Save.Write(txtJudge2.Text); 
        Save.Write(txtJudge3.Text); 
        Save.Write(txtJudge4.Text); 
        Save.Write(txtJudge5.Text); 
        Save.Write(txtOperator.Text); 
        Save.Write(txtPos1.Text); 
        Save.Write(txtPos2.Text); 
        Save.Write(txtPos3.Text); 
        Save.Write(txtPos4.Text); 
        Save.Write(txtPos5.Text); 

        for (int i = 0; i < itemsCount; i++) 
        { 
         Save.Write(lstbxStudents.Items[i].ToString()); 
         Save.Write(lstbxStudentScore.Items[i].ToString()); 
        } 

        Save.Close(); 
        fs.Close(); 


       } 
      } 
      catch (Exception error) 
      { 
       MessageBox.Show(error.Message, "CTSD Forms"); 
      } 
     } 
    } 

預先感謝您

這裏是形式

Window Form

+1

你能說清楚你想改進/有麻煩嗎?大多數程序(包括Word)不會「更新」現有文件,而是完全覆蓋隨着內存中加載的數據(Save/SaveAs)。所以「像Word一樣」並不完全清楚地解釋問題。 –

+0

您確定要將文本保存到二進制文件嗎?將它退出是一個問題。 –

+0

如果您想保存_而不是_Save As_,則不需要對話框。你保留你打開的文件的路徑,並將它作爲FileStream()的第一個參數。所有'SaveFileDialog'確實讓用戶通過對話框指定文件路徑。 –

回答

0

的形象。如果我理解正確,你正在努力實現的是將文本追加而不是覆蓋。查看StreamWriter類,該類還允許在構建實例時指定是否要append the data or not。它還允許直接創建/附加到文件,而不需要Stream

而且,考慮使用適當的名字變量:

Save是行動,而不是一個對象。 writer會更好。

通過以您在代碼中顯示的方式使用Write,您將以所有沒有分隔符的文本結束。您應該考慮使用WriteLine函數。

[在澄清編輯]

SaveEntry應該採取一個參數指定是否保存作爲SaveAsSave完成。首先保存應始終是SaveAs。也應該在上下文中保存文件名(您的表格類,但最好有一個「查看模型」)

private String _currentFileName; 

public void SaveEntry(bool saveAs) 
{ 
    if (saveAs || String.IsNullOrEmpty(_currentFileName)) 
    { 
     saveFileDialog1.InitialDirectory = Application.StartupPath; 
     saveFileDialog1.FileName = "FormData.bin"; 
     var result = saveFileDialog1.ShowDialog(); 

     // TODO: handle user cancellation 
     _currentFileName = saveFileDialog1.FileName; 
    } 

    using (var writer = new StreamWriter(_currentFileName)) 
    { 
     // TODO: do stuff with your writer 
    } 
} 
+0

沒有WriteLine函數?僅(更改保存到作家)writer.Write();? –

+0

但一切正常,因爲它是,我想要的是與MS詞保存按鈕相同的功能 –

相關問題