newbie
newbie

Reputation: 1217

Why is fopen not working?

I can't figure out why this isn't working.

#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;
}

if I remove the // from the commented lines, the error compiler gives is

: Invalid argument

I don't understand why (I read all the other threads related, and nothing). It does actually write the out.txt file OK, so it doesn't seem like a path misspelled problem.

Upvotes: 2

Views: 12396

Answers (3)

Yashar Azadvatan
Yashar Azadvatan

Reputation: 159

Change backslash to slash. Maybe you don't have permissions or something like that.

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

if (!out) 
    perror("fopen");

return 0;

Upvotes: 0

chqrlie
chqrlie

Reputation: 144550

The input file name seems bogus:

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

The filename is just a single space " " and in.txt is probably not a directory.

Change the code to:

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

Or preferably:

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

for better portability as forward slashes work in Windows as well as in Unix.

Furthermore, it is easy to provide more information as to why fopen() failed to open the files.

Here is a modified 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;
}

Upvotes: 1

msc
msc

Reputation: 34568

Remove backslash after in.txt.

Upvotes: 3

Related Questions