C语言判断文件是否存在
用函数access,头文件是io.h,原型:
int access(const char *filename, int amode);
amode参数为0时表示检查文件的存在性,如果文件存在,返回0,不存在,返回-1。
这个函数还可以检查其它文件属性:
06 检查读写权限
04 检查读权限
02 检查写权限
01 检查执行权限
00 检查文件的存在性
而这个就算这个文件没有读权限,也可以判断这个文件存在于否
存在返回0,不存在返回-1
#include
int main()
{
if(access("file",0) < 0)
printf("'file' is not exist!\n");
return 0;
}
後記:
access()比fopen()判斷檔案是否存在來的快很多,舉例來說:
FILE *fptr;
fptr=fopen("data.wav","r");
if( fptr ){
// if file exist...
}
會先做檔案開啟並且設定為寫入狀態,但是這樣就造成一個問題,如果檔案並不存在,系統會將fptr變數指向NULL。
而這個動作會導致程式(在研究裡是使用DLL裡的Function)在判斷的時候,因為存取到NULL,也就是記憶體之外,進而產生Error。
而將程式修改為access()判斷程式是否存在,就不會造成記憶體存為NULL,並且加快程式判斷。
if( access( "data.wav", 0 ) == 0 ) {
// if file exist...
}
有時間要研究一下,這個access是怎麼做檔案存在的判斷。
用函数access,头文件是io.h,原型:
int access(const char *filename, int amode);
amode参数为0时表示检查文件的存在性,如果文件存在,返回0,不存在,返回-1。
这个函数还可以检查其它文件属性:
06 检查读写权限
04 检查读权限
02 检查写权限
01 检查执行权限
00 检查文件的存在性
而这个就算这个文件没有读权限,也可以判断这个文件存在于否
存在返回0,不存在返回-1
#include
int main()
{
if(access("file",0) < 0)
printf("'file' is not exist!\n");
return 0;
}
後記:
access()比fopen()判斷檔案是否存在來的快很多,舉例來說:
FILE *fptr;
fptr=fopen("data.wav","r");
if( fptr ){
// if file exist...
}
會先做檔案開啟並且設定為寫入狀態,但是這樣就造成一個問題,如果檔案並不存在,系統會將fptr變數指向NULL。
而這個動作會導致程式(在研究裡是使用DLL裡的Function)在判斷的時候,因為存取到NULL,也就是記憶體之外,進而產生Error。
而將程式修改為access()判斷程式是否存在,就不會造成記憶體存為NULL,並且加快程式判斷。
if( access( "data.wav", 0 ) == 0 ) {
// if file exist...
}
有時間要研究一下,這個access是怎麼做檔案存在的判斷。
文章標籤
全站熱搜

從函式取名的字義來看,還有參數的屬性感覺不像只單純做判斷 雖然我c寫得不很熟 不果我自己認為比較好得做法還是去看api 了解參數的意義 如果有興趣的話 可以去反組譯dll 看method裡面implement了些甚麽東西!
然後幫你找了一下資料 原來c沒有針對i/o來做的函式 但是標準開檔函式 fopen() 這裡有詳細的介紹 http://java.csie.nctu.edu.tw/~deryann/paper/CIO.htm r是開啟參數沒錯,但是還有很多屬性是針對不同檔案格式來開。 r..rb..rb+..r+等等 r屬性是開啟檔並作為輸入用。等等...其他你可以自己看! 也許幫的上忙...吧! 我現在也沒時間看~有空在一起研究交流吧!來去睏
恩~關於fopen()的應用,我有看過相關的資料,只是...對於fopen()沒有辦法滿足我要的需求。 因為國科會的計畫要結案,所以我沒什麼時間去了解這個function和反組譯dll的工作。只想趕快趕出來(畢竟一年的計畫要在三個半禮拜生出來真的是要人命...) 展大哥,改天有空教一下怎麼把dll反組譯成程式碼XDDD 因為我找到的反組譯程式,只是將他反組譯成組合語言而已ˊˋ
hey hey..我早沒在那裡教書了呀 不過我還是記得你呀 總是坐在非常前面的魏同學 我呀還是在高雄的一些大學教呀 真快呢 你們已經念研究所了喔 而且看來行程很滿耶 呵呵 不錯呀 充實過活 盡情玩樂^^
哈~老師~ 很早以前就知道您沒有在樹德任職了...因為後來我有去通識學院打聽XD 行程滿...這是真的,但是...我沒辦法盡情玩樂阿~~~~~(淚奔)