无法写入c中的文件

时间:2015-11-09 02:56:55

标签: c fopen

在第一部分我正在阅读文件,然后我试图将数据写入另一个txt文件但无法运行下面的文件...输出错误如下...请让我知道......非常感谢....

Error output:
1>------ Build started: Project: DataValidation, Configuration: Debug Win32 ------
1>  Validate.cpp
1>d:\dropbox\validate.cpp(56): error C2059: syntax error : 'if'
1>d:\dropbox\validate.cpp(56): error C2143: syntax error : missing ';' before '{'
1>d:\dropbox\validate.cpp(58): error C2181: illegal else without matching if
1>d:\dropbox\validate.cpp(67): error C2059: syntax error : 'while'
1>d:\dropbox\validate.cpp(71): error C2065: 'inFile' : undeclared identifier
1>d:\dropbox\validate.cpp(71): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\dropbox\validate.cpp(71): error C2365: 'fclose' : redefinition; previous definition was 'function'
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\stdio.h(184) : see declaration of 'fclose'
1>d:\dropbox\validate.cpp(73): error C2059: syntax error : 'return'
1>d:\dropbox\validate.cpp(74): error C2059: syntax error : '}'
1>d:\dropbox\validate.cpp(74): error C2143: syntax error : missing ';' before '}'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h> //for exit (1)

int main(){
FILE* inFile;   //file handle or pointer
FILE* outFile;
char there_was_error = 0;
char opened_in_read = 1;
char filename[100];
char line[100]; //buffer
char test;
int src, dest, type, port;
char data[100];

printf("Enter filename: ");
scanf("%s", filename);

printf("Processing filename %s ...\n", filename);
inFile = fopen(filename, "r");
if (inFile == NULL) {       //check if file handler is invalid
    printf("Could not open file %s\n", filename);
    exit(1);    //error status code
}

//test = fscanf(inFile, "%d:%d:%d:%d:", &src, &dest, &type, &port); //read line from file
//fgets(data, 100, inFile);
do {
    test = fscanf(inFile, "%d:%d:%d:%d:", &src, &dest, &type, &port);//read line from file
    fgets(data, 100, inFile);
    //printf("%d %d %d %d %s", src, dest, type, port, data);

    outFile = fopen("data_1.txt", "rb+");
    if (outFile == NULL)
    {
        opened_in_read = 0;
        outFile = fopen("data_1.txt", "wb");
        if (outFile == NULL)
            there_was_error = 1;
    }
    if (there_was_error)
    {
        printf("Disc full or no permission\n");
        return EXIT_FAILURE;
    }
    if (opened_in_read)
        printf("The file is opened in read mode."
        " Let's read some cached data\n");
    else
        printf("%d %d %d %d %s", src, dest, type, port, data);
    return EXIT_SUCCESS;
}


    if (src >= 1 && src <= 1024){
    }
    else {

    }
    if (dest >= 1 && dest <= 1024){
    }
    else {

    }

} while (test != EOF);



fclose(inFile); //must always close file once done

return 0;
}

2 个答案:

答案 0 :(得分:1)

This might help you

我用gcc编译代码。有一个错误..请检查你的do..while循环....以下代码编译正确。

    #define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h> //for exit (1)

int main(){
FILE* inFile;   //file handle or pointer
FILE* outFile;
char there_was_error = 0;
char opened_in_read = 1;
char filename[100];
char line[100]; //buffer
char test;
int src, dest, type, port;
char data[100];

printf("Enter filename: ");
scanf("%s", filename);

printf("Processing filename %s ...\n", filename);
inFile = fopen(filename, "r");
if (inFile == NULL) {       //check if file handler is invalid
    printf("Could not open file %s\n", filename);
    exit(1);    //error status code
}

//test = fscanf(inFile, "%d:%d:%d:%d:", &src, &dest, &type, &port); //read line from file
//fgets(data, 100, inFile);
do {
    test = fscanf(inFile, "%d:%d:%d:%d:", &src, &dest, &type, &port);//read line from file
    fgets(data, 100, inFile);
    //printf("%d %d %d %d %s", src, dest, type, port, data);

    outFile = fopen("data_1.txt", "rb+");
    if (outFile == NULL)
    {
        opened_in_read = 0;
        outFile = fopen("data_1.txt", "wb");
        if (outFile == NULL)
            there_was_error = 1;
    }
    if (there_was_error)
    {
        printf("Disc full or no permission\n");
        return EXIT_FAILURE;
    }
    if (opened_in_read)
        printf("The file is opened in read mode."
        " Let's read some cached data\n");
    else
        printf("%d %d %d %d %s", src, dest, type, port, data);
    return EXIT_SUCCESS;



    if (src >= 1 && src <= 1024){
    }
    else {

    }
    if (dest >= 1 && dest <= 1024){
    }
    else {

    }

} while (test != EOF);



fclose(inFile); //must always close file once done

return 0;
}

请编译一次,让我知道错误。(如果有的话)

答案 1 :(得分:0)

编译器警告您不要使用scanf("%s"),因为它有serious security problems。它还警告您不要使用fopen,但只要您检查fopenerrno就完全安全了。他们建议您使用fopen_s代替,仅在C11中提供。似乎主要区别在于fopen_s返回错误代码而不是设置errno。这并不是使用它的一个令人信服的理由。