2015-04-07 3 views
0

Насколько я понимаю, есть тысячи таких проблем, но мне не удалось найти решение моей проблемы. Вот код:C program fopen() не открывает файл

#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 

int main() 
{ 
FILE *inputFile=fopen("I:\\Test\main.cpp","R"); 
FILE *outFile=fopen("I:\\Test\main2.cpp", "W"); 
if (inputFile==NULL) { 
    printf("Unable to locate source file"); 
    _getch(); 
    return 1; 
} 
int c; 
int inSingleLine=0; 
int inMultiLine=0; 
int d=fgetc(inputFile); 
while(c=fgetc(inputFile)!=EOF){ 
if (d==EOF) break; 
if((c=='/') && (d=='*')) inMultiLine=1; 
if ((c='*') && (d=='/')) inMultiLine=0; 
if((c=='/')&& (d=='/')) inSingleLine=1; 
if (c='\n') inSingleLine=0; 
if (!inSingleLine && !inMultiLine) { 
    putc(c,outFile); 
} 
d=getc(inputFile); 
} 
// This is a test string 
fclose(inputFile); 
fclose(outFile); 

/* And this is not a test 
Actually not 
*/ 

return 0; 
} 

Независимо от того, что я делаю, положил ли я main.cpp в ту же папку с файлом ехе и сделать его FILE *inputFile=fopen("main.cpp","R"); или указать абсолютный путь, я получаю «Не удается найти исходный файл " все время. Пожалуйста, помогите!

+4

'' I: \\ Test \ main.cpp "' -> '" I: \\ Test \\ main.cpp "и' "R" '->' "r" ' – BLUEPIXY

+0

nope, по-прежнему та же проблема –

+3

@ small-j вы пытались использовать '' r "' вместо '" R "'? –

ответ

4

Строки режима для режима чтения и записи: "r" и "w", а не "R" и "W". Использование недопустимого режима, вероятно, вызывает ошибку fopen.

+0

Точно, зачем кому-то использовать' "R" '? –

+1

@iharob Это первая буква в предложении :) –

+0

И продолжение этого ... изучение кодов ошибок полезно! – mah

3
int main() 
{ 
FILE *inputFile=fopen("I:\\Test\main.cpp","R"); <-- This results in the string "I:\Testain.cpp" 
    ... 

Убедитесь, что вы используете два «\» символы (побег как обратные косые черты), и использовать строчные «ш» и «г»:

FILE *inputFile=fopen("I:\\Test\\main.cpp","r"); 
0

Как указано выше, вы должны " escape "обратную косую черту с двойной. Вы должны всегда проверить возвращаемое значение от fopen(), а затем вы можете получить сообщение на основании errno. Когда я попробовал следующее с нижним регистром "r", я получил предупреждение компилятора о недействительной escape-последовательности \m, но программа хорошо себя вела.

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main() 
{ 
    FILE *inputFile=fopen("I:\\Test\main.cpp","r"); 
    printf("After trying to open\n"); 
    if (inputFile == NULL) 
     printf ("%s\n", strerror(errno)); 
    else 
     fclose(inputFile); 
    return 0; 
} 

я получил:

After trying to open 
No such file or directory 

Но когда я попробовал его с прописной "R" программа висела (MSVC), я не знаю, почему.

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