Как перевести строку при записи в файл?
Подскажите, как переходить на новую строку при записи в файл. Я работаю на C++ через WinAPI
(функция WriteFile). Если я пишу ‘\n’, то при просмотре файла в блокноте, строка не переводиться на новую, просто палочка рисуется |
4 ответа
24 ноября 2005 года
1.9K / / 06.09.2004
Originally posted by dailys
Если я пишу ‘\n’, то при просмотре файла в блокноте, строка не переводиться на новую, просто палочка рисуется |
Угу, заметил 🙂 Я обычно с текстовыми файлами работаю через стандартные фукнции Си. Через них удобнее с текстами работать. По поводу вопроса: должно быть как-то просто, но на данный момент мне не пришло в голову ничего проще, чем подглядеть код перевода строки в hex-редакторе 🙂
И вот что получили:
int main(void)
HANDLE h_file=CreateFile(«text.txt»,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,NULL);
char new_line[]=»\x0D\x0A»;//код перевода строки и возврата каретки
char buf[]=»проверка»;
DWORD num;
WriteFile(h_file,buf,strlen(buf),&num,0);
WriteFile(h_file,new_line,strlen(new_line),&num,0);//собственно переводим строку
WriteFile(h_file,buf,strlen(buf),&num,0);
CloseHandle(h_file);
return 0;
>
Как перевести курсор на новую строку при чтении из файла в СИ?
Я создаю текстовый файл в режиме «w» и записываю туда информацию.
Затем считываю её порциями в режиме «r»:
считываю первую порцию (30 байт), записываю её в переменную. Перевожу курсор на 30 байт от начала файла, считываю вторую порцию (10 байт) и заношу в переменную, затем так же третью порцию (10 байт). После этого, данная строка символов в файле заканчивается, мне нужно перейти на следующую строку и считать всё точно такими же порциями. Как начать считывать следующую строку?
Вот код программы:
#include #include #define N 30 #define R 10 #define K 2 struct STUDENT< char name[N]; char group[R]; char marks[R]; >; int main() < /* Восьмеричный код "Возврат каретки"*/ const char CR= '\015'; /* Восьмеричный код "Перевод строки"*/ const char LF = '\012'; struct STUDENT students; int i; FILE *file; //Запись в файл file = fopen("structures.txt", "w"); fprintf(file, "Korobkov N.V."); fseek(file, N, SEEK_SET); fprintf(file, "IST-151"); fseek(file, N+R, SEEK_SET); fprintf(file, "5 3 4 5 1"); fclose(file); //Чтение из файла file = fopen("structures.txt", "r"); for (i = 0; i < N; i++)< fscanf(file, "%c", &students.name[i]); >fseek(file, N, SEEK_SET); //Перевод курсора на 30 байт for (i = 0; i < R; i++)< fscanf(file, "%c", &students.group[i]); >fseek(file, N+R, SEEK_SET); //Перевод курсора на 40 байт for (i = 0; i < R; i++)< fscanf(file, "%c", &students.marks[i]); >fclose(file); //Вывод полей структуры на экран printf("%s\n", students.name); printf("%s\n", students.group); printf("%s\n", students.marks); return 0; >
- Вопрос задан более трёх лет назад
- 8489 просмотров
1 комментарий
Оценить 1 комментарий
Как на Си реализовать ввод в файл с новой строки?

P.S. Такими формулировками вопросов можно же людям весь мозг сломать. И вообще это в Development должно быть.
xaizek ★★★★★
( 04.11.17 16:43:28 MSK )
anonymous
( 04.11.17 16:44:57 MSK )

#include #include #include int main(void) < FILE *fp = NULL; size_t filesize = 0; char *filecontents = NULL; const char *strfilewrite = "lor is a wonderful site"; // разумное чтение fp = fopen("file.txt", "r"); if (fp == NULL) < fprintf(stderr, "open file error\n"); return -1; >fseek(fp, 0L, SEEK_END); filesize = ftell(fp); fseek(fp, 0L, SEEK_SET); filecontents = (char *) malloc((filesize +1) * sizeof(char)); if (filecontents == NULL) < fprintf(stderr, "mem alloc error\n"); return -1; >fread(filecontents, sizeof(char), filesize, fp); *(filecontents + filesize) = '\0'; fprintf(stdout, "%s\n", filecontents); free(filecontents); fclose(fp); // разумная запись fp = fopen("file.txt", "a+"); fwrite(strfilewrite, sizeof(char), strlen(strfilewrite), fp); fclose(fp); return 0; >
как-то так.. вне проверял, тут печатал.
cherry
( 05.11.17 13:53:22 MSK )
Ответ на: комментарий от xaizek 04.11.17 16:43:28 MSK

И вообще это в Development должно быть.
Может, он ядро переписывает, бгг.
Virtuos86 ★★★★★
( 05.11.17 13:55:36 MSK )
Ответ на: комментарий от cherry 05.11.17 13:53:22 MSK

// разумная запись fp = fopen("file.txt", "a+"); if (fp == NULL) < // забыл проверочку. fprintf(stderr, "open file error\n"); return -1; >fwrite(strfilewrite, sizeof(char), strlen(strfilewrite), fp); fclose(fp);
Как перенести на новую строку java
В Java, чтобы сделать перенос на новую строку, можно использовать специальный символ – \n . Это символ перевода строки. Попробуем вывести на экран такую строку:
System.out.println("- Are you hungry?\n- Aaaarrrgh!");
Результат на экране будет следующий: