我正在尝试检查目录中的文件。我做得很好。但我遇到异常问题 - >当文件不存在时。这是我想要做的:我想检查文件,如果它存在,然后退出循环。如果文件不存在,则休眠。睡眠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;
}
答案 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一样:)