windows下的文件操作,一般都用C語言的文件函數(shù),其中文件打開函數(shù)fopen
創(chuàng)新互聯(lián)專注于企業(yè)成都營(yíng)銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、細(xì)河網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、商城網(wǎng)站制作、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為細(xì)河等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
fopen函數(shù)用來打開一個(gè)文件,其調(diào)用的一般形式為:
文件指針名=fopen(文件名,使用文件方式)
其中,“文件指針名”必須是被說明為FILE 類型的指針變量,“文件名”是被打開文件的文件名。 “使用文件方式”是指文件的類型和操作要求。“文件名”是字符串常量或字符串?dāng)?shù)組。例如:
FILE *fp;
fp=("file a","r");
其意義是在當(dāng)前目錄下打開文件file a, 只允許進(jìn)行“讀”操作,并使fp指向該文件。
又如:
FILE *fphzk
fphzk=("c:\\hzk16',"rb")
其意義是打開C驅(qū)動(dòng)器磁盤的根目錄下的文件hzk16, 這是一個(gè)二進(jìn)制文件,只允許按二進(jìn)制方式進(jìn)行讀操作。兩個(gè)反斜線“\\ ”中的第一個(gè)表示轉(zhuǎn)義字符,第二個(gè)表示根目錄。使用文件的方式共有12種,下面給出了它們的符號(hào)和意義。
文件使用方式 意 義
“rt” 只讀打開一個(gè)文本文件,只允許讀數(shù)據(jù)
“wt” 只寫打開或建立一個(gè)文本文件,只允許寫數(shù)據(jù)
“at” 希望在文件內(nèi)追加內(nèi)容,打開一個(gè)文本文件,并在文件末尾寫數(shù)據(jù)
“rb” 只讀打開一個(gè)二進(jìn)制文件,只允許讀數(shù)據(jù)
“wb” 只寫打開或建立一個(gè)二進(jìn)制文件,只允許寫數(shù)據(jù)
“ab” 追加打開一個(gè)二進(jìn)制文件,并在文件末尾寫數(shù)據(jù)
“rt+” 讀寫打開一個(gè)文本文件,允許讀和寫
“wt+” 讀寫打開或建立一個(gè)文本文件,允許讀寫
“at+” 讀寫打開一個(gè)文本文件,允許讀,或在文件末追加數(shù) 據(jù)
“rb+” 讀寫打開一個(gè)二進(jìn)制文件,允許讀和寫
“wb+” 讀寫打開或建立一個(gè)二進(jìn)制文件,允許讀和寫
“ab+” 讀寫打開一個(gè)二進(jìn)制文件,允許讀,或在文件末追加數(shù)據(jù)
C語言中open函數(shù)
作用:打開和創(chuàng)建文件。
簡(jiǎn)述:
1
2
3
4
#includefcntl.h
intopen(constchar*pathname,intflags);
intopen(constchar*pathname,intflags,mode_tmode);
返回值:成功則返回文件描述符,否則返回-1
對(duì)于open函數(shù)來說,第三個(gè)參數(shù)僅當(dāng)創(chuàng)建新文件時(shí)(即
使用了O_CREAT
時(shí))才使用,用于指定文件的訪問權(quán)限位(access
permission
bits)。pathname
是待打開/創(chuàng)建文件的POSIX路徑名(如/home/user/a.cpp);flags
用于指定文件的打開/創(chuàng)建模式,這個(gè)參數(shù)可由以下常量(定義于fcntl.h)通過邏輯位或邏輯構(gòu)成。
1
2
3
O_RDONLY只讀模式
O_WRONLY只寫模式
O_RDWR讀寫模式
打開/創(chuàng)建文件時(shí),至少得使用上述三個(gè)常量中的一個(gè)。以下常量是選用的:
1
2
3
4
5
6
O_APPEND每次寫操作都寫入文件的末尾
O_CREAT如果指定文件不存在,則創(chuàng)建這個(gè)文件
O_EXCL如果要?jiǎng)?chuàng)建的文件已存在,則返回-1,并且修改errno的值
O_TRUNC如果文件存在,并且以只寫/讀寫方式打開,則清空文件全部?jī)?nèi)容(即將其長(zhǎng)度截短為0)
O_NOCTTY如果路徑名指向終端設(shè)備,不要把這個(gè)設(shè)備用作控制終端。
O_NONBLOCK如果路徑名指向FIFO/塊文件/字符文件,則把文件的打開和后繼I/O
設(shè)置為非阻塞模式
1
(nonblockingmode)
以下三個(gè)常量同樣是選用的,它們用于同步輸入輸出
1
2
3
4
O_DSYNC等待物理I/O結(jié)束后再write。在不影響讀取新寫入的數(shù)據(jù)的
前提下,不等待
文件屬性
更新。
1
2
O_RSYNCread等待所有寫入同一區(qū)域的寫操作完成后再進(jìn)行
O_SYNC等待物理I/O結(jié)束后再write,包括更新文件屬性的I/O
open返回的文件描述符一定是最小的未被使用的描述符。
如果
NAME_MAX(文件名最大長(zhǎng)度,不包括'\0')是
14,而我們想在當(dāng)前目錄下創(chuàng)建文件名長(zhǎng)度超過
14
字節(jié)的文件,早期的
System
V
系統(tǒng)(如
SVR2)會(huì)截?cái)喑霾糠?,只保留?/p>
14
個(gè)字節(jié);而由
BSD
衍生的(BSD-derived)系統(tǒng)會(huì)返回錯(cuò)誤信息,并且把
errno
置為
ENAMETOOLONG。
POSIX.1
引入常量
_POSIX_NO_TRUNC
用于決定是否截?cái)嚅L(zhǎng)文件名/長(zhǎng)路徑名。如果_POSIX_NO_TRUNC
設(shè)定為禁止截?cái)?,并且路徑名長(zhǎng)度超過
PATH_MAX(包括
'\0'),或者組成路徑名的任意文件名長(zhǎng)度超過
NAME_MAX,則返回錯(cuò)誤信息,并且把
errno
置為
ENAMETOOLONG。
都已經(jīng)大二了,老師既然還教我們C語言的基礎(chǔ)open函數(shù)的使用,感到無力?。?!只能粵嵌牛逼
作業(yè)1:嘗試從文件中讀取某些字節(jié)? test.txt
作業(yè)2: test.txt,如果該文件存在則清空,不存在則創(chuàng)建,寫入"hello"
作業(yè)3: 完成copy.c的拷貝 例如: ./copy 1.txt 2.txt