-1
我有一個包含以下文本稱爲test.txt的文本文件:從文本文件中給出的文件名/路徑檢查文件是否存在?
文件路徑/Desktop/file.txt
我所需要的單詞後的文件路徑來獲取路徑,並檢查如果該文件實際存在於文件系統中。我使用strchr()和strtok()從文本文件中提取「/Desktop/file.txt」,並將其與access()函數一起用於檢查是否存在。然而,它從來沒有真正起作用,並且說它並不是每一次都存在,即使它確實存在。
這是我的代碼的一部分,試圖讓這個工作。
char *buffer = 0;
long length;
FILE *getfile;
getfile = fopen("test.txt", "r");
if (getfile){
fseek (getfile, 0, SEEK_END);
length = ftell (getfile);
fseek (getfile, 0, SEEK_SET);
buffer = malloc (length);
if (buffer){
fread (buffer, 1, length, getfile);
}
fclose (getfile);
}
char *getfilepath = (strchr(buffer, 'filepath') + 2);
int filepathexists = access(getfilepath, F_OK);
if(filepathexists == 0){
printf("The file exists.");
} else {
printf("File does NOT exist.");
}
不能使用這麼長的字符'strchr'文字。一個proprer編譯器(或啓用正確的編譯標誌)應該警告「字符太長」。 – usr2564301
您已閱讀文件末尾的換行符。文件名不包含換行符。如果根目錄有一個你可以訪問的'/ Desktop'子目錄,那麼除去換行符,代碼就會有效。你確定在'/'中有'/ Desktop'目錄嗎? (哦,並用換行符結束打印消息;這有助於確保消息顯示及時,並且不會與提示輸入下一個命令等相混淆) –
另請注意,來自'fread()'的輸入不是將被終止爲你...所以它讀取一個字節數組而不是一個字符串。你需要從fread()中獲取返回值,這樣你才知道文件名是多長。 –