2013-06-03 70 views
1

我有一個關於MFC CFile寫入功能的問題。
我正在學習MFC應用程序並停留在此另存爲和寫入功能。 當我點擊TestButton時,會彈出一個另存爲對話框,提示保存爲txt文件。CFile寫入功能

void CLearnDlg::OnBnClickedButtonTest() 
{ 
CString m_strPathName; 
char* File; 
TCHAR szFilters[] = 
    _T ("Text files (*.txt)¦*.txt¦All files (*.*)¦*.*¦¦"); 

CFileDialog dlg (FALSE, _T ("txt"), _T ("*.txt"), 
    OFN_OVERWRITEPROMPT, szFilters); 

if (dlg.DoModal() == IDOK) 
    m_strPathName = dlg.GetPathName(); 

CFile DataFile(m_strPathName, CFile::modeReadWrite | CFile::modeCreate); 

char buffer0[100] = "TEST0"; 
char buffer1[100] = "TEST1"; 
int GetLength; 


for (int i=0; i<2; i++) 
{ 
    File = (("%S, %S\n\n"), buffer0, buffer1); 
    GetLength = strlen(File); 
    DataFile.Write(File, GetLength); 
} 
DataFile.Close(); 
MessageBox(_T("OK")); 
} 

的問題是我怎麼寫兩個緩衝彙集成一個單一的File然後將其寫入到DataFile並盡一切寫在一個新行?
輸出文件被保存,但只有一個緩衝區(TEST1)被保存兩次而不需要換行。

回答

2

其實,有什麼問題你的代碼,如果你的代碼是正確的,那麼你的編程語句

File = (("%S, %S\n\n"), buffer0, buffer1); 

只有一個意思是,先創建文件的字符數組與buffer0與緩衝器1替換所以最後你會得到buffer1作爲最終的文件值。

關於\ n不能正常工作,因爲它應該是這樣的,\ r \ n

所以你的最終方案可能是什麼樣子,

 // TODO: Add your control notification handler code here 
    CString m_strPathName; 
    char* File; 
    TCHAR szFilters[] = 
     _T ("Text files (*.txt)¦*.txt¦All files (*.*)¦*.*¦¦"); 

    CFileDialog dlg (FALSE, _T ("txt"), _T ("*.txt"), 
     OFN_OVERWRITEPROMPT, szFilters); 

    if (dlg.DoModal() == IDOK) 
     m_strPathName = dlg.GetPathName(); 

    CFile DataFile(m_strPathName, CFile::modeReadWrite | CFile::modeCreate); 

    char buffer0[100] = "TEST0"; 
    char buffer1[100] = "TEST1"; 
    int GetLength; 

    File = new char[strlen(buffer0)+strlen(buffer1)+2]; 
    for (int i=0; i<2; i++) 
    { 
     strcpy(File,buffer0); 
     strcat(File,buffer1); 
     strcat(File,"\r\n"); 
     GetLength = strlen(File); 
     DataFile.Write(File, GetLength); 
    } 
    DataFile.Close(); 
    MessageBox(_T("OK")); 

    CDialogEx::OnOK(); 
} 

[編輯]

// TODO: Add your control notification handler code here 
    CString m_strPathName; 
    char* File; 
    TCHAR szFilters[] = 
     _T ("Text files (*.txt)¦*.txt¦All files (*.*)¦*.*¦¦"); 

    CFileDialog dlg (FALSE, _T ("txt"), _T ("*.txt"), 
     OFN_OVERWRITEPROMPT, szFilters); 

    if (dlg.DoModal() == IDOK) 
     m_strPathName = dlg.GetPathName(); 

    CFile DataFile(m_strPathName, CFile::modeReadWrite | CFile::modeCreate); 

    char buffer0[100] = "TEST0"; 
    char buffer1[100] = "TEST1"; 
    int GetLength; 

    File = new char[strlen(buffer0)+strlen(buffer1)+2]; 
    for (int i=0; i<2; i++) 
    { 
     double doublevalue; 
     doublevalue = 1035.25414; 
     sprintf(File,"%s,%s,%f\r\n", buffer0, buffer1,doublevalue);  //Dumping data string and double data saparated with comma 
     GetLength = strlen(File); 
     DataFile.Write(File, GetLength); 
     sprintf(File,"%f>>>%s>>>%s\r\n", doublevalue,buffer1,buffer0);  //Dumping data double and string data saparated with >> 
     GetLength = strlen(File); 
     DataFile.Write(File, GetLength); 
    } 
    DataFile.Close(); 
    MessageBox(_T("OK")); 
+0

謝謝,代碼有效。但是,如果我想添加第三個值到'File = newchar .....'這是一個'double',我該怎麼做呢?像>> double,buffer0,buffer1 <<還有,如何添加一個逗號來分隔txt文件中的兩個緩衝區?像>> TEST0,TEST1' <<等等。 – Ashton

+1

@Ashton編輯後請看到更新後的代碼,你會得到你需要的。 –

+0

非常感謝!但是,對於雙重我不應該使用'%lf'? – Ashton