文件NULL不被循环忘记 - C

时间:2014-02-05 00:51:01

标签: c loops while-loop

我正在尝试检查目录中的文件。我做得很好。但我遇到异常问题 - >当文件不存在时。这是我想要做的:我想检查文件,如果它存在,然后退出循环。如果文件不存在,则休眠。睡眠3秒后,再次检查文件。重复直到找到文件,然后返回main()并打印“Hello everyone”。

目前,如果文件丢失并且我在程序运行时将文件放入此目录,它将永远不会识别新文件,直到我停止程序然后重新启动它。我希望程序在睡眠后再次检查文件。

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
#include <unistd.h>

#define MYFILE "/Users/stackoverflow/Documents/fileabc123"

int checkfile() {
    FILE *pFile;
    pFile = fopen(MYFILE,"r");
    char file_string[40];
    int repeat = 0;

    while( repeat < 1) {
        if (pFile!=NULL) {
            fgets (file_string,36,pFile);
            fclose (pFile);
            printf("%s\n", file_string);
            repeat = 1 ;
        }

        if (pFile ==NULL) {
            printf("Machine cannot read system file. \n");
            sleep(3);
        }
    }
}


int main (int argc, char ** argv) {
    checkfile();
    printf("Hello everyone\n");

    return 0;
}

2 个答案:

答案 0 :(得分:0)

您需要将fopen放入循环中。

if ((pFile = fopen(MYFILE, "r")) != NULL) {
    // read it
}
else {
    printf("Failed opening");
}

答案 1 :(得分:0)

错误在循环中。

你只是不想再次打开文件:)

这给你2个错误: 1.如果你把文件放在那里看不到,因为程序不会尝试打开它 2.如果文件存在,则读取它,然后关闭它,留下INVALID文件的描述但是非空

这意味着下一个循环,您将尝试读取无效的文件描述符。它类似于使用数组溢出索引或free()指针读取/写入值。 你将几乎总是拥有正确的价值..直到重新分配该ram。

所以: 1.你必须尝试打开一个文件,直到你得到一个有效的文件描述符。 2. close不会改变指针值。它根本无法想到它。

如果你想改变某事物的价值,你必须给它的地址。指针是某事物的地址。所以File *指向一个文件,但如果你想改变File *指向的地址,你需要它的地址(&amp; pFile),就像scanf一样:)