阅读和写新线字符

时间:2013-05-10 09:37:23

标签: c++ win32gui

我现在真的很困惑如何处理\ n和\ r \ n charecters。我正在用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 Application Start 10/05/2013 02:32:36 PM Application Start 10/05/2013 02:47:31 PM Application Start < / p>

全部在同一行,但当我在wordpad或textpad中打开它时,它会显示所有内容,例如,

10/05/2013 02:32:28 PM应用程序开始

10/05/2013 02:32:36 PM应用程序开始

10/05/2013 02:47:31 PM应用程序开始

请告诉我我哪里出错了。

注意: - 我已经使用\ r \ n但它不起作用。

2 个答案:

答案 0 :(得分:0)

我认为这是在Windows上。 Windows行分隔符是CRLF(\r\n)。记事本只能容忍这一点。 Word或wordpad可以处理\n分隔符。在unices上,行分隔符为\n,因此unix gvim也可以处理它。

因此,要么在每行的末尾添加\r\n,要么使用文本查看器,它只能处理\n行结尾。

答案 1 :(得分:-2)

不同的系统期望不同的行结尾。

Windows传统上需要\ r \ n,而unix更喜欢\ n。

你看到的是一些应用程序在处理不同的表示方面更好。记事本是脑死亡,并期望\ r \ n。写字板有点聪明,可以处理UNIX风格的\ n。

http://en.wikipedia.org/wiki/Newline