Member 13089825 Ответов: 1

Как хранить данные в файле в vc++ mfc


я хочу сохранить некоторые сообщения об ошибках и предупреждениях в файл журнала, и я хочу создать файл журнала зависит от даты, если данные одинаковы, я не должен создавать новый файл и должен открыть существующий файл и сохранить данные.
не удалось сохранить все данные в файл и сохранить его только первые 4 символа.
не могли бы вы меня поправить

Что я уже пробовал:

time_t timeVal = 0;

    time(&timeVal);
    char szTimeBuff[128];
    struct tm tmVal;
    localtime_s(&tmVal, &timeVal);
    size_t zCount = strftime(szTimeBuff, _countof(szTimeBuff), "%Y_%m_%d_", &tmVal);
cstring data L"eror data please enter the correct user name and password"
	
    CString FileName = L"log_error_";
    FileName += szTimeBuff;
    FileName += "_Log";
    CFile	myFile;

    if (myFile.Open((FileName ), CFile::modeCreate |
        CFile::modeReadWrite))
    {
        myFile.Write(data, sizeof(data));// its not showing all the data in the file log its showing only first 4 character i.e erro
        myFile.Flush();
        myFile.Seek(0, CFile::begin);
    }

1 Ответов

Рейтинг:
2

Jochen Arndt

Чтобы добавить данные в существующий файл и создать его, если он еще не существует, используйте CFile::modeNoTruncate флаг вместо флага CFile::modeCreate Последний будет создавать файлы только в том случае, если они не существовали, и выдавать исключение в противном случае (см. Класс CFile[^]).

То оператор sizeof - cppreference.com[^] обрабатывается во время компиляции, чтобы получить размер объекта. Он не будет возвращать длину динамических данных времени выполнения, таких как строки.

Вы должны передать длину данных в байтах при записи:

myFile.Write(data.GetString(), data.GetLength() * sizeof(TCHAR));
GetLength() возвращает количество символов в строке. Потому что Write() функция основана на байтах, количество символов должно быть умножено на количество байтов на символ (2 в приложениях Unicode).

Обратите также внимание, что вы создаете текстовый файл Unicode, если ваше приложение является Unicode (что такое L префикс строкового литерала предполагает).