我现在真的很困惑如何处理 \n 和 \r\n 字符。我正在用 C++ 读写一些文件。
基本上我想在考虑以下条件的情况下维护一个 exe 的日志文件。
1)如果文件不存在,则创建文件。
2)如果文件已经存在,则在其上附加数据。
但是它无法正常工作的一些原因是我正在使用的一些代码块。
打开一个文件,我正在使用以下代码。
bool ApplicationfileNotOpen;
char* ApplicationFileLogName;
ApplicationFileLogName = ".\\ApplicationLog\\Sample.log";
HANDLE APllicationLogWriteHandle;
APllicationLogWriteHandle = CreateFile(ApplicationFileLogName, // name of the write
GENERIC_WRITE, // open for writing
0, // do not share
NULL, // default security
CREATE_NEW, // create new file only
FILE_ATTRIBUTE_NORMAL, // normal file
NULL); // no attr. template
要在文件中写入数据,我使用以下代码..
char MessageString[200];
MessageString = "Application Start \n";
time_t ApplicationNow = time(NULL);
ApplicationNow = time(NULL);
struct tm * timeinfo = localtime(&ApplicationNow);
char Applicationtimstring[100];
strftime (Applicationtimstring,32,"%d/%m/%Y %I:%M:%S %p",timeinfo);
char Temp_Char_Array[DEFAULT_ARRAY_SIZE];
StrCpy(Temp_Char_Array,Applicationtimstring);
StrCat(Temp_Char_Array, MessageString);
DWORD dwBytesToWrite = (DWORD)strlen(Temp_Char_Array);
DWORD dwBytesWritten = 0;
BOOL bErrorFlag = FALSE;
bErrorFlag=WriteFile(ApplicationFileHandle, // open file handle
Temp_Char_Array, // start of data to write
dwBytesToWrite, // number of bytes to write
&dwBytesWritten, // number of bytes that were written
NULL); // no overlapped structure
为了从文件中读取,我正在使用以下代码。
char* ApplicationFileLogName;
ApplicationFileLogName = ".\\ApplicationLog\\Sample.log";
FILE *ApplicationfileOpenHandle;
ApplicationfileOpenHandle =fopen(ApplicationFileLogName,"r");
//Read file..
while(fgets(CurrentString , DEFAULT_ARRAY_SIZE , ApplicationfileOpenHandle) != NULL)//Reading one by one line from file it UNICODE..
{
printf("%s",CurrentString);
}
现在,当我在 notpad 中打开文件“sample.log”时,它会在同一行中显示所有内容。
10/05/2013 02:32:28 PM 申请开始 10/05/2013 02:32:36 PM 申请开始 10/05/2013 02:47:31 PM 申请开始
都在同一行,但是当我在写字板或文本板中打开它时,它会向我显示所有正确的内容,例如,
10/05/2013 02:32:28 PM 申请开始
10/05/2013 02:32:36 PM 申请开始
10/05/2013 02:47:31 PM 申请开始
请告诉我哪里出错了。
注意:- 我已经使用 \r\n 但它不起作用。.