2013-06-27 2 views
0

мне нужно открыть этот файл, но он не открывается, и я не знаю, почему:Текстовый файл не oppening в C

#include<stdio.h> 

void copy(); 

int main(void) 
{ 
    copy(); 

    return 0; 
} 

void copy() 
{ 
    FILE *src = fopen("srcc.txt", "r+"); 

    if(!src) 
    { 
     printf("It was not possible to open the file"); 
     return; 
    } 
} 

Это просто пройти, если состояние и появится сообщение it was not possible to open the file и файл не создано.

+0

Вы открываете файл для чтения. Таким образом, файл должен существовать. Убедитесь, что у вас есть 'srcc.txt' в вашем текущем каталоге. Если вы хотите создать файл, вам нужно открыть его в режиме записи или добавления – Bill

+0

oh, я думал, что с «r +» ОС создаст файл, если он не существует. Большое спасибо –

+2

Обязательно: всегда проверяйте 'errno' или используйте' perror' и включайте то, что они расскажут вам в вопросах C, связанных с неудачными системными вызовами. – millimoose

ответ

1

Чтобы получить код ошибки, вы можете использовать errno и strerror(). Для fopen() для большинства реализаций библиотеки переменная errno также имеет системный код ошибки при сбое.

Вы могли бы попробовать что-то вроде:

#include <errno.h> 
... 
... 
FILE *src = fopen("srcc.txt", "r+"); 
if(!src) 
{ 
    printf("ERROR: %d - %s\n", errno, strerror(errno)); // <---- This will print out some 
                 // useful debug info for you 
    printf("It was not possible to open the file"); 
    return; 
} 

errno.h будет иметь список определяет для кодов ошибок и общие strerror() преобразует errno в строку, вы можете распечатать ...

Вероятно, коды, которые вы могли бы увидеть, в этом случае включают некоторые из следующих (только что скопированные дословно из errno.h - i оставили фактические значения ...):

#define EPERM /* Operation not permitted */ 
#define ENOENT /* No such file or directory */ 
... 
#define EACCES /* Permission denied */ 
... 
0

Если файл существует, он, вероятно, доступен только для чтения ... вы не можете использовать «r +» в файле, который не доступен для записи. Вам действительно нужно «r +», а не просто «r»?

0

Скорее всего, он не может найти файл. Я предлагаю делать различные копии файла и помещать их в различные папки.

+1

Действительно? Какие папки вы предлагаете? –

+0

Где ваш проект. Я знаю, что это смешно делать, но, черт возьми, я делал это больше раз, чем могу рассчитывать. Смотрите, потому что вы ссылаетесь на файл просто на «srcc.txt». Я предполагаю, что он ищет его в папке по умолчанию. Теперь, если вы не знаете, какая именно папка именно так, просто вставьте файл в различные папки проекта, а также вложенные папки. – LTKD

+1

«Я знаю, что это смешно делать». «Но, черт возьми, я делал это больше раз, чем могу сосчитать» - жаль это слышать. Возможно, вам следовало потратить время, понимая, где находится текущий каталог вашей программы. Вот мысль: * напишите * файл и посмотрите, где он заканчивается. –