如果是通過(guò)open方式打開(kāi)的,那么第一個(gè)參數(shù)就是文件路徑信息:
威寧ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
#include sys/types.h
#include sys/stat.h
#include fcntl.h
int open(const char *path, int oflag, /* mode_t mode */...);
如果是通過(guò)fopen方式打開(kāi)的,那么第一個(gè)參數(shù)就是文件路徑信息:
#include stdio.h
FILE *fopen(const char *filename, const char *mode);
無(wú)論通過(guò)open還是fopen打開(kāi)文件,都必須先知道文件路徑信息,盡管可能是相對(duì)路徑。
如果知道了filename的內(nèi)容,我們就可以定位它的絕對(duì)路徑,也就是你說(shuō)的完全路徑。
1. filename本身就是絕對(duì)路徑,ok。
2. filename是相對(duì)路徑,那么先通過(guò)getcwd獲取進(jìn)程的執(zhí)行路徑,然后再獲取絕對(duì)路徑即可。
#include unistd.h
extern char *getcwd(char *buf, size_t size);
但是,如果進(jìn)程在打開(kāi)文件后又執(zhí)行了chdir、fchdir之類函數(shù)的話,估計(jì)就不能夠再獲取文件路徑信息了。
#include unistd.h
int chdir(const char *path);
int fchdir(int fildes);
C語(yǔ)言標(biāo)準(zhǔn)庫(kù)函數(shù)存放在頭文件當(dāng)中,使用相應(yīng)函數(shù)時(shí)需要用include引用先關(guān)頭文件。
C語(yǔ)言程序設(shè)計(jì)里,C 標(biāo)準(zhǔn)函數(shù)(C Standard library)是所有目前符合標(biāo)準(zhǔn)的頭文件(head
file)的集合,以及常用的函數(shù)庫(kù)實(shí)現(xiàn)程序,例如 I/O輸入輸出和字串符控制。不像 COBOL、Forrian和 PL/I等編程語(yǔ)言,在 C
語(yǔ)言的工作任務(wù)里不會(huì)包含嵌入的關(guān)鍵字,所以幾乎所有的 C 語(yǔ)言程序都是由標(biāo)準(zhǔn)函數(shù)庫(kù)的函數(shù)來(lái)創(chuàng)建的。
下面列出C89及C99中C語(yǔ)言標(biāo)準(zhǔn)函數(shù)庫(kù)的頭文件。
C89中標(biāo)準(zhǔn)的頭文件
assert.h 設(shè)定斷言點(diǎn)
ctype.h 字符處理
errno.h 錯(cuò)誤報(bào)告
float.h 定義與實(shí)現(xiàn)相關(guān)的浮點(diǎn)值勤
limits.h 定義與實(shí)現(xiàn)相關(guān)的各種極限值
locale.h 支持函數(shù)setlocale()
math.h 數(shù)學(xué)函數(shù)庫(kù)使用的各種定義
setjmp.h 支持非局部跳轉(zhuǎn)
signal.h 定義信號(hào)值
stdarg.h 支持可變長(zhǎng)度的變?cè)斜?/p>
stddef.h 定義常用常數(shù)
stdio.h 支持文件輸入和輸出
stdlib.h 其他各種聲明
string.h 支持串函數(shù)
time.h 支持系統(tǒng)時(shí)間函數(shù)
C99新增的頭文件和庫(kù)
complex.h 支持復(fù)數(shù)算法
fenv.h 給出對(duì)浮點(diǎn)狀態(tài)標(biāo)記和浮點(diǎn)環(huán)境的其他方面的訪問(wèn)
inttypes.h 定義標(biāo)準(zhǔn)的、可移植的整型類型集合。也支持處理最大寬度整數(shù)的函數(shù)
iso646.h 首先在此1995年第一次修訂時(shí)引進(jìn),用于定義對(duì)應(yīng)各種運(yùn)算符的宏
stdbool.h 支持布爾數(shù)據(jù)類型類型。定義宏bool,以便兼容于C++
stdint.h 定義標(biāo)準(zhǔn)的、可移植的整型類型集合。該文件包含在inttypes.h中
tgmath.h 定義一般類型的浮點(diǎn)宏
wchar.h 首先在1995年第一次修訂時(shí)引進(jìn),用于支持多字節(jié)和寬字節(jié)函數(shù)
wctype.h 首先在1995年第一次修訂時(shí)引進(jìn),用于支持多字節(jié)和寬字節(jié)分類函數(shù)
C語(yǔ)言里
在main函數(shù)的第二個(gè)參數(shù)里面,
保存著當(dāng)前程序運(yùn)行的目錄
也就是argv[0]
main( int argc, char *argv[])
{
printf("%s ", argv[0] );
}
就是文件當(dāng)前所在位置
不過(guò)需要注意的一點(diǎn)是
這個(gè)路徑里面保存了當(dāng)前文件的文件名
如果你只是需要路徑的話還需要自己操作一下
main(int a,char *c[])
{
char s[100];
int i;
//把路徑保存到字符串s里
strcpy(s,c[0]);
for(i=strlen(s); i0 ; i--)
if( s[i] == '\\')
{
s[i]='\0';
break;
}
//找到最后一個(gè) \ 并刪除之后的內(nèi)容
//最后輸出的s,就是當(dāng)前文件的路徑了
puts(s);
}
#include stdio.h
main()
{
char str[80]="d:\\files\\dataFiles\\data\\avatar.bmp"; // 單斜杠處填雙斜杠
int L,i;
L = strlen(str);
for (i=L-1;i=0;i--) if (str[i] == '\\') { str[i] ='\0'; break;}; // 去掉文件名就是路徑
printf("Path= %s",str);
return 0;
}
-----------
寫成函數(shù)和調(diào)用:
#include stdio.h
void fun(char *str){
int L,i;
L = strlen(str);
for (i=L-1;i=0;i--) if (str[i] == '\\') { str[i] ='\0'; break;};
}
main()
{
char str[80]="d:\\files\\dataFiles\\data\\avatar.bmp";
fun(str);
printf("Path= %s",str);
return 0;
}
可以為main函數(shù)增加兩個(gè)參數(shù)
int
main(int
argc,char*
argv[])
{
return
0;
}
argc
是命令行參數(shù)的個(gè)數(shù),argv是一個(gè)字符串?dāng)?shù)組,代表以空格分隔的命令行參數(shù),其中
argv[0]
是程序自身的路徑(包括文件名)。
也可以使用API函數(shù)
GetModuleFileName
,用法如下,需要包含頭文件
windows.h
和
tchar.h
TCHAR
szFile[MAX_PATH]
=
{0};
DWORD
dwLen
;
//返回路徑長(zhǎng)度
dwLen
=
GetModuleFileName(NULL,szFile,MAX_PATH);
此時(shí),szFile
中保存了程序本身的路徑,可以將最后的擴(kuò)展名改為
txt
即可得到一個(gè)與程序同路徑同名的文本文件名,將數(shù)據(jù)寫入其中即可。
代碼如下:
szFile[dwLen
-3]
=
0;
_tcscat(szFile,_T("txt"));
此時(shí),szFile
就是一個(gè)文件文件路徑了,可以直接用。
我想,你所說(shuō)的默認(rèn)路徑,可以先把一個(gè)路徑(想要的默認(rèn)路徑)保存到一個(gè)字符數(shù)組中,輸入文件名后,用
strcat
函數(shù)把文件名連接到默認(rèn)路徑的后面就可以了。
如果要改變路徑,就用
strcpy
直接把新的路徑復(fù)制到字符數(shù)組中。
一般來(lái)說(shuō)是放在/usr/include目錄下的;
但是這個(gè)并不局限也是可控的,如果我們進(jìn)行開(kāi)發(fā)過(guò)程中, 就會(huì)在內(nèi)核的庫(kù)函數(shù)文件目錄:
例如在:/XXX/XXX/linux-X.X/include
所以根據(jù)不同的情況,頭文件存放的目錄也是不同的,具體需要可以根據(jù)locate和grep命令進(jìn)行查詢。
分享標(biāo)題:c語(yǔ)言函數(shù)的文件路徑,c語(yǔ)言文件相對(duì)路徑
當(dāng)前路徑:http://jinyejixie.com/article28/hsesjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、網(wǎng)站制作、關(guān)鍵詞優(yōu)化、動(dòng)態(tài)網(wǎng)站、虛擬主機(jī)、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)