2017-02-19 4 views
2

Ich kann nicht herausfinden, warum das nicht funktioniert.Warum funktioniert fopen nicht?

#include <stdio.h> 

int main(void) { 
    FILE *in, *out; 
    // char *FULLPATH = "C:\\Users\\Jay\\c\\workspace\\I-OFiles\\in.txt\\ "; 
    // char *mode = "r"; 
    // in = fopen(FULLPATH, mode); 
    // 
    // if (in == NULL) { 
    //  perror("Can't open in file for some reason\n"); 
    //  exit (1); 
    // } 

    out = fopen("C:\\Users\\Jay\\c\\workspace\\I-OFiles\\out.txt", "w"); 

    if (out == NULL) { 
     perror("Can't open output file for some reason \n"); 
     exit(1); 
    } 

    fprintf(out, "foo U"); 
    fclose(in); 
    fclose(out); 
    return 0; 
} 

wenn ich die // von den Kommentarzeilen zu entfernen, gibt der Fehler-Compiler ist

: Invalid argument

Ich verstehe nicht, warum (ich alle anderen lesen verwandte Themen und nichts). Es schreibt tatsächlich die out.txt-Datei OK, also scheint es nicht wie ein falsch geschriebenes Problem zu sein.

+8

'in.txt \\' -> 'in.txt' –

+3

Haben Sie eigentlich ein Verzeichnis namens' in.txt'? – melpomene

+0

danke @SouravGhosh, ich wusste nicht, was ich sonst noch versuchen sollte – newbie

Antwort

3

Entfernen Sie den Backslash nach in.txt.

1

Die Eingabedatei Name scheint gefälschte:

"C:\\Users\\Jay\\c\\workspace\\I-OFiles\\in.txt\\ " 

Der Dateiname nur ein einziger Raum ist " " und in.txt ist wahrscheinlich kein Verzeichnis.

Ändern Sie den Code zu:

const char *FULLPATH = "C:\\Users\\Jay\\c\\workspace\\I-OFiles\\in.txt"; 

Oder bevorzugt:

const char *FULLPATH = "C:/Users/Jay/c/workspace/I-OFiles/in.txt"; 

für eine bessere Portabilität als Vorwärts-Arbeit in Windows als auch in Unix zerschneidet.

Darüber hinaus ist es einfach, mehr Informationen zu liefern, warum fopen() nicht gelungen, die Dateien zu öffnen. Hier

ist eine modifizierte Version:

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

int main(void) { 
    FILE *in, *out; 

    in = fopen("C:/Users/Jay/c/workspace/I-OFiles/in.txt", "r"); 
    if (in == NULL) { 
     perror("Cannot open input file"); 
     exit(1); 
    } 

    out = fopen("C:/Users/Jay/c/workspace/I-OFiles/out.txt", "w"); 
    if (out == NULL) { 
     fclose(in); 
     perror("Cannot open output file"); 
     exit(1); 
    } 

    fprintf(out, "foo U"); 
    fclose(in); 
    fclose(out); 
    return 0; 
} 
+0

Der Aufruf von 'perror()' wird die Ergebnisse von 'strerror (errno)' in seiner 'angezeigten Ausgabe enthalten, ohne dass das Programm das '' enthalten muss errno.h' Header-Datei noch die Header-Datei 'string.h' – user3629249

+0

Die Funktion' exit() 'befindet sich in der Header-Datei' stdlib.h'. so wird dies nicht sauber kompilieren – user3629249

+0

der erste Aufruf zu 'fopen()' fehlt ein abschließendes Doppelzitat '" 'in den Dateinamen – user3629249