關於C開啟檔案失敗
C語言可以做到使用檔案的多種方式,例如開啟一個用於讀取的文字檔案,建立一個用於寫入的文字檔案,附加一個文字檔案等等。現在我們討論一下關於使用C語言開啟檔案錯誤的情景。
fopen函式用來開啟一個檔案,其有固定的呼叫形式:檔案指標名=fopen(檔名,"r"),我們這裡討論開啟所以是"r",如有其他操作則給fopen傳入相應的使用檔案方式,例如附加一個文字是"rb"。檔名必須被宣告為FILE型別的指標變數。
例如我現在要開啟一個文字,我在E//KanKan目錄下建立一個日記本文件,將其命名為wode,日記本文件的字尾是.jnt。現在我們可以在編譯器底下寫入相應的程式碼來開啟這個日記本文件。
現在我先讓FILE指標變數指向一個test.c檔案,注意,現在肯定會開啟失敗,應為E目錄下根本不存在test.c檔案
程式碼演示:
{
FILE *p;
p = fopen("E:\\KanKan\\test.c", "r");
if (p == NULL)
{
printf("open file error\n");
}
else
{
printf("open file success\n");
}
system("pause");
return 0;
}
結果:
現在我們將程式碼略微修改為:
{
FILE *p;
p = fopen("E:\\KanKan\\wode.jnt", "r");
if (p == NULL)
{
printf("open file error\n");
}
else
{
printf("open file success\n");
}
system("pause");
return 0;
}
結果:
同時我們要注意一個計算機的小知識帶點,計算機的組織裡有一些關於文字的一些設定,一般的計算機在預設狀態就具有某些特定檔案的字尾,比如說我在上面測試所建立的檔名為wode的檔案,計算機預設的已經在wode後面添加了.jnt,如果不小心將文字建立為wode.jnt,現在我們在open函式裡依然傳入wode.jnt肯定會編譯失敗。
同時在我們編譯器為我們開啟檔案分裝了一個專門的庫函式strerror,如果開啟檔案失敗我們可以在printf函式裡實現對strerror函式進行鏈式訪問,可以自定分析出檔案是因為什麼原因而開啟失敗
程式碼演示:
FILE *p;
p = fopen("E:\\KanKan\\wode.jnt", "r");
if (p == NULL)
{
printf("open file error\n");
printf("error: %s\n", strerror(errno));
}
else
{
printf("open file success\n");
}
system("pause");
return 0;
}
使用strerror函式標頭檔案是errno.h
結果:
strerror函式可以接受不同的int數字,不同數字代表不同檔案開啟的錯誤
例如:printf("error: %s\n", strerror(4));
結果: