CFile записывает некоторую стоимость мусора - PullRequest
0 голосов
/ 01 февраля 2012

Я записываю некоторые данные в File.But, но это не записывает это должным образом. Код:

CString sFileName = "C:\\Test.txt";
CFile gpFile;

    CString testarr[10] = {"Tom","Ger","FER","DER","SIL","REM","FWE","DWR","SFE","RPOP"};

    if (!gpFile.Open( sFileName,CFile::modeCreate|CFile::modeWrite))
    {
        AfxMessageBox( sFileName + (CString)" - File Write Error");      
        return;
    }
   else
   {
      gpFile.Write(testarr,10);
   }

    AfxMessageBox("Completed");
    gpFile.Close(); 

Показывает файл как enter image description here

1 Ответ

2 голосов
/ 01 февраля 2012

Это, вероятно, потому что вы используете CFile неправильно. Первый параметр CFile::Write должен быть буфером, байты которого вы хотите записать в файл. Однако testarr больше похож на «буфер буферов», поскольку каждый элемент testarr является строкой, а сама строка является последовательностью байтов.

Вместо этого вам нужно либо объединить элементы testarr, а затем вызвать CFile::Write. Или (возможно, более практично) итерируйте по testarr, печатая каждую строку по одному, например для вашего конкретного примера следующее должно делать то, что вы ищете:

for(int i = 0; i < 10; ++i)
{
    gpFile.Write(testarr[i], strlen(testarr[i]));
}

Возможно, для этого есть какой-то встроенный способ, но я не очень знаком с MFC, поэтому мне там особо не помогут.

...