新聞中心
C語(yǔ)言判斷指定文件是否存在
頭文件:io.h
目前創(chuàng)新互聯(lián)公司已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、下花園網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
功 能: 確定文件或文件夾的訪問(wèn)權(quán)限。即,檢查某個(gè)文件的存取方式,比如說(shuō)是只讀方式、只寫(xiě)方式等。如果指定的存取方式有效,則函數(shù)返回0,否則函數(shù)返回-1。
用 法: int access(const char *filenpath, int mode); 或者int _access( const char *path, int mode );
參數(shù)說(shuō)明:
filenpath
文件或文件夾的路徑,當(dāng)前目錄直接使用文件或文件夾名
備注:當(dāng)該參數(shù)為文件的時(shí)候,access函數(shù)能使用mode參數(shù)所有的值,當(dāng)該參數(shù)為文件夾的時(shí)候,access函數(shù)值能判斷文件夾是否存在。在WIN NT 中,所有的文件夾都有讀和寫(xiě)權(quán)限
mode
要判斷的模式
在頭文件unistd.h中的預(yù)定義如下:
#define R_OK 4 /* Test for read permission. */
#define W_OK 2 /* Test for write permission. */
#define X_OK 1 /* Test for execute permission. */
#define F_OK 0 /* Test for existence. */
具體含義如下:
00 只判斷是否存在
02 只判斷是否有寫(xiě)權(quán)限
04 只判斷是否有讀權(quán)限
06 判斷是否有讀并且有寫(xiě)權(quán)限
程序例
#includestdio.h
#includeio.h
int file_exists(char *filename);
int main(void)
{
printf("Does NOTEXIST.FIL exist: %s\n",
file_exists("NOTEXISTS.FIL") ?"YES":"NO");
return 0;
}
int file_exists(char *filename)
{
return (access(filename, 0) == 0);
}
頭文件:io.h
功 能: 確定文件或文件夾的訪問(wèn)權(quán)限。即,檢查某個(gè)文件的存取方式,比如說(shuō)是只讀方式、只寫(xiě)方式等。如果指定的存取方式有效,則函數(shù)返回0,否則函數(shù)返回-1。
用 法: int access(const char *filenpath, int mode); 或者int _access( const char *path, int mode );
參數(shù)說(shuō)明:
filenpath
文件或文件夾的路徑,當(dāng)前目錄直接使用文件或文件夾名
備注:當(dāng)該參數(shù)為文件的時(shí)候,access函數(shù)能使用mode參數(shù)所有的值,當(dāng)該參數(shù)為文件夾的時(shí)候,access函數(shù)值能判斷文件夾是否存在。在WIN NT 中,所有的文件夾都有讀和寫(xiě)權(quán)限
mode
要判斷的模式
在頭文件unistd.h中的預(yù)定義如下:
#define R_OK 4 /* Test for read permission. */
#define W_OK 2 /* Test for write permission. */
#define X_OK 1 /* Test for execute permission. */
#define F_OK 0 /* Test for existence. */
具體含義如下:
00 只判斷是否存在
02 只判斷是否有寫(xiě)權(quán)限
04 只判斷是否有讀權(quán)限
06 判斷是否有讀并且有寫(xiě)權(quán)限
程序例
#includestdio.h
#includeio.h
int file_exists(char *filename);
int main(void)
{
printf("Does NOTEXIST.FIL exist: %s\n",
file_exists("NOTEXISTS.FIL") ?"YES":"NO");
return 0;
}
int file_exists(char *filename)
{
return (access(filename, 0) == 0);
}
C語(yǔ)言文件函數(shù)
//要另外說(shuō)下如fprintf(stderr, "Can't open %s\n", file_app);這是向文件或者系統(tǒng)設(shè)備輸出的函數(shù);但他的文件指針為stderr;這是c中的標(biāo)準(zhǔn)錯(cuò)誤輸出設(shè)備指針,系統(tǒng)自動(dòng)分配為顯示器故相當(dāng)于printf("Can't open %s\n", file_app);
#include stdio.h
#include stdlib.h
#include string.h
#define BUFSIZE 1024
#define SLEN 81
void append(FILE *source, FILE *dest);
int main(void)
{
FILE *fa, *fs; //定義2個(gè)文件類型指針
int files = 0; // 追加文件個(gè)數(shù)
char file_app[SLEN];
char file_src[SLEN]; // 2個(gè)字符串用來(lái)儲(chǔ)存文件名;
puts("Enter name of destination file:");//輸出Enter name of destination file:
gets(file_app);//輸入要追加的文件名
if ((fa = fopen(file_app, "a")) == NULL)//fa指向追加的目的文件,以追加方式打開(kāi)文件,如果打開(kāi)失敗退出;
{
fprintf(stderr, "Can't open %s\n", file_app);
exit(2);
}
if (setvbuf(fa, NULL, _IOFBF, BUFSIZE) != 0)//創(chuàng)建緩沖器與流相關(guān),大小為BUFSIZE,作用是提高IO速度;如果打開(kāi)失敗退出
{
fputs("Can't create output buffer\n", stderr);
exit(3);
}
puts("Enter name of first source file (empty line to quit):");//輸出Enter name of first source file (empty line to quit):
while (gets(file_src) file_src[0] != '\0')//輸入源文件如果是空串結(jié)束循環(huán)
{
if (strcmp(file_src, file_app) == 0)//如果源和追加文件相同
fputs("Can't append file to itself\n",stderr);
else if ((fs = fopen(file_src, "r")) == NULL)//如果打開(kāi)源文件失敗
fprintf(stderr, "Can't open %s\n", file_src);
else
{
if (setvbuf(fs, NULL, _IOFBF, BUFSIZE) != 0)//創(chuàng)建緩沖器與流相關(guān),大小為BUFSIZE,作用是提高IO速度;如果打開(kāi)失敗開(kāi)始下次循環(huán)
{
fputs("Can't create input buffer\n",stderr);
continue;
}
append(fs, fa);//函數(shù)
if (ferror(fs) != 0)//檢查文件操作是否有錯(cuò)
fprintf(stderr,"Error in reading file %s.\n",
file_src);
if (ferror(fa) != 0)
fprintf(stderr,"Error in writing file %s.\n",
file_app);
fclose(fs);//關(guān)閉源文件
files++;//追加文件數(shù)+1
printf("File %s appended.\n", file_src);
puts("Next file (empty line to quit):");
}
}
printf("Done. %d files appended.\n", files);
fclose(fa);//關(guān)閉追加文件
return 0;
}
void append(FILE *source, FILE *dest)
{
size_t bytes;
static char temp[BUFSIZE];
while ((bytes = fread(temp,sizeof(char),BUFSIZE,source)) 0)//把源文件的內(nèi)容追加到追加文件,塊大小sizeof(char),塊數(shù)為BUFSIZE
fwrite(temp, sizeof (char), bytes, dest);//寫(xiě)文件塊大小sizeof(char),塊數(shù)為BUFSIZE
}
判斷文件是否存在 c語(yǔ)言 函數(shù)
排版後如下: int access(const char* szPathName){ #ifdef _WIN32 if ( _access(szPathName, 0) != 0 ) return -1; #else if ( access(szPathName, F_OK) != 0 ) return -1; #endif return 0; } 這是用到 preprocessor. 用在跨平臺(tái)(platform)的各種編譯器. 各平臺(tái)的 .h 會(huì)不同. 在微軟的平臺(tái)會(huì)定義 _WIN32 這個(gè)符號(hào). 所以這段話就成為 int access(const char* szPathName){ if ( _access(szPathName, 0) != 0 ) return -1; return 0; } 在其它平臺(tái)不會(huì)定義 _WIN32 這個(gè)符號(hào). 所以這段話就成為 int access(const char* szPathName){ if ( access(szPathName, F_OK) != 0 ) return -1; return 0; }
網(wǎng)頁(yè)標(biāo)題:c語(yǔ)言文件存在函數(shù) c語(yǔ)言保存文件函數(shù)
鏈接URL:http://www.dlmjj.cn/article/hjpije.html