Открытие файлов в C
Полное редактирование:
Я расстраиваюсь, я не знаю, что я делаю неправильно, у меня все еще есть много вещей, которые нужно сделать в коде, но я даже не могу открыть файл, чтобы продолжить свою работу.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{
char letter;
FILE *fp;
fp=fopen("C:\\Users\\LENOVO\\Desktop\\data.txt","r");
if(fp==NULL)
{
printf("error");
getch();
exit(1);
}
while(fscanf(fp,"%d",&letter)!=EOF)
putchar(letter);
getch();
fclose(fp);
}
Изображение пути: https://imgur.com/a/YwFYy
Все еще печатает ошибку
3 ответа
Чтобы прочитать все из текстового файла и сохранить его содержимое в буфере:
Во-первых, вы должны посчитать, сколько символов в текстовом файле:
size_t get_file_len(FILE *fp)
{
size_t num = 0;
while (fgetc(fp) != EOF)
num++;
return (fseek(fp, 0, SEEK_SET) == 0 ? num : 0);
}
Затем выделите память для достаточно большого буфера и прочитайте все символы:
char *load_text(const char *path)
{
char *buf = NULL;
FILE *fp = NULL;
size_t num = 0;
size_t i = 0;
int c = 0;
/* open the file in text mode */
fp = fopen(path, "r");
if (!fp)
return NULL;
/* if the file was empty or if an error occurred, return error */
if ((num = get_file_len(fp)) == 0) {
fclose(fp);
return NULL;
}
buf = malloc(num + 1);
if (!buf) {
fclose(fp);
return NULL;
}
while ((c = fgetc(fp)) != EOF)
buf[i++] = (char)c;
/* ensure that the string is null-terminated */
buf[i] = '\0';
fclose(fp);
return buf;
}
Кроме того, в C все escape-последовательности начинаются с '\' (обратная косая черта), поэтому, если вы хотите написать обратную косую черту в строку или символ, вы должны записать ее как '\\' (двойная обратная косая черта):
input=fopen("C:\\Users\\LENOVO\\Desktop\\data.txt","r");
Хорошо, во-первых, давайте посмотрим на ваш путь к файлу. Есть два способа получить доступ к файлу из вашего локального хранилища:
относительные адреса, если файл имеет ту же корневую папку, что и ваше приложение
абсолютные адреса, если файл находится в определенном месте в памяти вашего компьютера
Я вижу, что вы пытаетесь использовать абсолютный адрес для чтения из вашего файла. Ваш путь правильный, но вы должны позаботиться о форматировании строки в C, потому что символ \ можно интерпретировать как что-то еще.
Я бы предложил использовать это вместо (двойная косая черта)
input=fopen("C:\\Users\\LENOVO\\Desktop\\data.txt","r");
Это предотвратит интерпретацию форматирования строки.
Во-вторых, EOF - это просто предопределенная макрос-константа, и я думаю, что она равна -1, поэтому ваш код while(! (-1)) не очень хорошая идея для чтения до конца файла.
Чтобы читать из файла, пока вы не достигнете его конца, я бы рассмотрел это свойство fscanf ():fscanf () возвращает EOF, когда он достигает конца файла.
while(fscanf(input,"%ch",&letter) != EOF) {
putchar(letter);
}
Этот способ чтения из файла должен делать свою работу.
Довольно просто здесь:
while(!feof(input)){
fscanf(input,"%c",&letter);
putchar(letter);
}
и не забудьте закрыть файл, используя fclose(input);