Функция записи CFile

У меня есть вопрос о функции записи MFC CFile.
Я изучаю приложение MFC и застрял в этой функции Сохранить как и написать.
Когда я нажимаю кнопку TestButton, появляется диалоговое окно сохранения как, предлагающее сохранить как текстовый файл.

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) сохраняется дважды без перехода на новую строку.

1

Решение

На самом деле что-то не так с вашим кодом, если ваш код верен, то ваш программный оператор

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

Имеет только одно значение: сначала создайте символьный массив File с buffer0 и замените его на buffer1, чтобы в итоге вы получили buffer1 в качестве окончательного значения File.

Около \ п не работает должным образом, потому что это должно быть, \ Г \ п

Так что ваша окончательная программа может выглядеть так,

      // 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"));
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]