2013-04-30 2 views
2

그냥 빈 줄을 파일에 쓰려고합니다. 나는 다음 코드를 사용하지만 작동하지 않는다.파일에 줄 바꿈 문자 쓰기

 char* RegID; 
     RegID = "10"; 
     char* mndtime; 
     mndtime = "10"; 
     char* resourcetype; 
     resourcetype = "Backup"; 
     char* ressubtype; 
     ressubtype = "shadowprotect"; 
     char* DataBuffer = new char[100]; 

     StrCpy(DataBuffer,"<wpshadowprotectstatus>"); 
     strcat(DataBuffer,"\n"); 
     strcat(DataBuffer,"<mndtime>"); 
     strcat(DataBuffer,RegID); 
     strcat(DataBuffer,"<\\mndtime>\n"); 
     strcat(DataBuffer,"<resourcetype>"); 
     strcat(DataBuffer,RegID); 
     strcat(DataBuffer,"<\\resourcetype>\n"); 
     strcat(DataBuffer,"<ressubtype>"); 
     strcat(DataBuffer,RegID); 
     strcat(DataBuffer,"<\\ressubtype>\n"); 
     strcat(DataBuffer,"<jobname>"); 
     strcat(DataBuffer,RegID); 
     strcat(DataBuffer,"<\\jobname>\n"); 
     strcat(DataBuffer,"<jobstarttime>"); 
     strcat(DataBuffer,RegID); 
     strcat(DataBuffer,"<\\jobstarttime>\n"); 
     HANDLE hFile; 

     hFile = CreateFile("text.txt",    // 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 

     if (hFile == INVALID_HANDLE_VALUE) 
     { 
      return 0; 
     } 
     DWORD dwBytesToWrite = (DWORD)strlen(DataBuffer); 
     DWORD dwBytesWritten = 0; 
     BOOL bErrorFlag = FALSE; 
     bErrorFlag = WriteFile(hFile,   // open file handle 
         DataBuffer,  // start of data to write 
         dwBytesToWrite, // number of bytes to write 
         &dwBytesWritten, // number of bytes that were written 
         NULL);   // no overlapped structure 

그러나 새 줄이 텍스트 파일에 덤프되지 않는 이유는 알 수 없습니다.

참고 : - 1) std :: library C++을 사용하고 싶지 않습니다. 2) xml 파서를 사용하고 싶지 않습니다.

+0

제발 .. strcat (DataBuffer, " \ n"); – Rob

+0

텍스트 파일에 무엇을 넣으시겠습니까? – Rob

+0

파일을 만들고 쓰는데'CreateFile'과'WriteFile'을 사용하고있는 것이 문제라고 생각합니다. 이렇게하면 C 런타임 라이브러리가 자동으로 "\ n"에서' "\ r \ n"'로 자동 변환되지 않게됩니다. 당신은 대체로 개행''\ n ''만을 얻습니다. 이것은 한 줄의 텍스트 뒤에 오른쪽에 바로 다음에 오는 개행 문자가 오는 것을 의미합니다. –

답변

2

Windows에서 줄 바꿈을 위해 \r\n을 사용하십시오.

그리고 XML 형식이 잘못되었습니다. XML 닫기 태그는 \ 문자가 아닌 / 문자를 사용합니다. 그리고 다른 변수 (mndtime, resourcetype 등)를 사용하는 대신 모든 XML 값에 대해 동일한 RegID 변수를 쓰고 있습니다.

2

Windows? 그렇다면 \ n을 \ r \ n으로 바꾸십시오. FILE */iostream의 경우 런타임에 의해 자동으로 수행되지만 WriteFile에는 적용되지 않습니다. 물론 빈 줄을 표시하려면 두 줄의 끝이 필요합니다.

현재 strcat을 사용하여 긴 문자열을 생성하는 것은 O (N^2) 복잡성을 가지며 매우 좋지 않습니다.

+0

http://c2.com/cgi/wiki?PrematureOptimization – Rob

+1

O (N^2) 복잡하게 만드는 복잡성. 버퍼 길이와 관련하여 검사를하지 않아 버퍼 오버플로가 발생하기 쉽습니다. –