2013-04-30 6 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' для создания и записи файла. Это позволит избежать автоматического перевода с '' \ n'' на '' \ r \ n "', что для библиотеки времени выполнения C для вас. Скорее всего, вы получаете новую строку '' \ n'', а это означает, что за одной строкой текста следующая следующая справа справа. –

ответ

2

Используйте \r\n для разрывов строк в Windows.

И ваш XML искажен. Теги закрытия XML используют символ /, а не символ \. И вы пишете одну и ту же переменную RegID для всех значений XML вместо использования других переменных (mndtime, resourcetype и т. Д.).

2

Windows? Если это так, замените \ n на \ r \ n. Для FILE */iostream это делается автоматически по времени выполнения, но не для WriteFile. И, конечно же, вам нужно два конца строки, чтобы получить пустую строку.

BTW, создавая длинную строку с strcat, имеет сложность O (N^2), что очень плохо.

+0

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

+1

Это не только O (N^2) сложность, которая делает ее плохой. Это факт, что он не проверяет длину буфера и, таким образом, легко приводит к переполнению буфера. –

Смежные вопросы