borland c++ bulder的檔案操作總結-2 (轉)
二、直接I/O操作
這是C提供的另一種檔案操作,它是透過直接存/取檔案來完成對檔案的處理,而上篇所說流式檔案操作是透過緩衝區來進行;流式檔案操作是圍繞一個FILE指標來進行,而此類檔案操作是圍繞一個檔案的“控制程式碼”來進行,什麼是控制程式碼呢?它是一個整數,是用來標識一個檔案(在中,控制程式碼的概念擴充套件到所有裝置資源的標識)的唯一的記號。此類檔案操作常用的如下表,這些函式及其所用的一些符號在io.h和fcntl.h中定義,在使用時要加入相應的標頭檔案。
函式 說明
open() 開啟一個檔案並返回它的控制程式碼
close() 關閉一個控制程式碼
lseek() 定位到檔案的指定位置
read() 塊讀檔案
write() 塊寫檔案
eof() 測試檔案是否結束
filelength() 取得檔案長度
rename() 重新命名檔案
chsize() 改變檔案長度
下面就對這些函式一一說明:
1.open()
開啟一個檔案並返回它的控制程式碼,如果失敗,將返回一個小於0的值,原型是int open(const char *path, int access [, unsigned mode]); 引數path是要開啟的檔名,access是開啟的,mode是可選項。表示檔案的屬性,主要用於系統中,在DOS/WINDOWS這個引數沒有意義。其中檔案的開啟模式如下表。
符號 含義 符號 含義 符號 含義
O_RDONLY 只讀方式 O_WRONLY 只寫方式 O_RDWR 讀/寫方式
O_NDELAY 用於UNIX系統 O_APPEND 追加方式 O_CREAT 如果檔案不存在就建立
O_TRUNC 把檔案長度截為0 O_EXCL 和O_CREAT連用,如果檔案存在返回錯誤 O_BINARY 二進位制方式
O_TEXT 文字方式
對於多個要求,可以用"|"運算子來連線,如O_APPEND|O_TEXT表示以文字模式和追加方式開啟檔案。
例:int handle=open("c:msdos.sys",O_BINARY|O_CREAT|O_WRITE)
2.close()
關閉一個控制程式碼,原型是int close(int handle);如果成功返回0
例:close(handle)
3.lseek()
定位到指定的位置,原型是:long lseek(int handle, long offset, int fromwhere);引數offset是移動的量,fromwhere是移動的基準位置,取值和前面講的fseek()一樣,SEEK_SET:檔案首部;SEEK_CUR:檔案當前位置;SEEK_END:檔案尾。此函式返回後檔案新的存取位置。
例:
lseek(handle,-1234L,SEEK_CUR);//把存取位置從當前位置向前移動1234個位元組。
x=lseek(hnd1,0L,SEEK_END);//把存取位置移動到檔案尾,x=檔案尾的位置即檔案長度
4.read()
從檔案讀取一塊,原型是int read(int handle, void *buf, unsigned len);引數buf儲存讀出的資料,len是讀取的位元組。函式返回實際讀出的位元組。
例:char x[200];read(hnd1,x,200);
5.write()
寫一塊資料到檔案中,原型是int write(int handle, void *buf, unsigned len);引數的含義同read(),返回實際寫入的位元組。
例:char x[]="I Love You";write(handle,x,strlen(x));
7.eof()
類似feof(),測試檔案是否結束,是返回1,否則返回0;原型是:int eof(int handle);
例:while(!eof(handle1)){……};
8.filelength()
返回檔案長度,原型是long filelength(int handle);相當於lseek(handle,0L,SEEK_END)
例:long x=filelength(handle);
9.rename()
重新命名檔案,原型是int rename(const char *oldname, const char *newname); 引數oldname是舊檔名,newname是新檔名。成功返回0
例:rename("c:config.sys","c:config.w40");
10.chsize();
改變檔案長度,原型是int chsize(int handle, long size);引數size表示檔案新的長度,成功返回0,否則返回-1,如果指定的長度小於檔案長度,則檔案被截短;如果指定的長度大於檔案長度,則在檔案後面補'。
例:chsize(handle,0x12345);
--------------------------------------------------------------------------------
如果熟悉可能會發現這種方式和組合語言的DOS功能控制程式碼式檔案操作很像,比如open()就像DOS服務的3CH號功能呼叫,其實這種操作還有兩種型別的函式就是直接用DOS功能來完成的,如_open(),_dos_open()等等。有興趣可自已查詢BCB的幫助。
同流式檔案操作相同,這種也提供了Unicode字元操作的函式,如_wopen()等等,用於9X/NT下的寬字元,有興趣可自已查詢BCB的幫助。
另外,此種操作還有lock(),unlock(),locking()等用於多操作的函式,但在BCB中用得並不多,我就不介紹了,但如果要用C來寫CGI,這些就必要的常識了,如果你有這方面的要求,那就得自已好好看幫助了。
到這裡,我就把基於C的檔案操作介紹完了,下一篇將介紹基於C++的檔案操作,敬請期待。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-989127/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- borland c++ bulder的檔案操作總結-1 (轉)C++
- borland c++ bulder的檔案操作總結-3 (轉)C++
- borland c++ bulder的檔案操作總結-4 (轉)C++
- C++檔案讀寫總結C++
- Borland C++ Builder的API後門 (轉)C++UIAPI
- python 檔案操作的基礎總結Python
- C++中的檔案操作C++
- C#檔案路徑操作總結
- C++寫檔案操作C++
- Borland C++ 5.02 IDE 中的 bug (轉)C++IDE
- C++中的檔案輸入/輸出(2):讀取檔案 (轉)C++
- js檔案操作總結一:圖片篇JS
- Python檔案操作方法大總結Python
- C++讀寫檔案操作C++
- C++檔案讀寫操作C++
- C++ 檔案操作詳解C++
- c++ IO類,檔案操作C++
- [原] PHP檔案及目錄操作總結(一)PHP
- C++ 序列操作函式最全總結C++函式
- [轉]DB2目錄檔案結構DB2
- CR2檔案怎麼轉換成jpg格式?快速轉換cr2檔案成jpg格式的操作技巧
- python檔案操作-讀寫刪除複製總結Python
- 操作檔案方法簡單總結(File,Directory,StreamReader,StreamWrite )
- Java中對檔案的操作 (轉)Java
- OS認證以及口令檔案的一點總結(轉)
- 【轉】Go檔案操作大全Go
- Javascript----檔案操作 (轉)JavaScript
- BMP點陣圖檔案結構及VC操作 (轉)
- 【ASM】ASM資料檔案和OS檔案(FILESYSTEM)轉移方法總結ASM
- Java轉iOS:第一個專案總結(2)JavaiOS
- ocfs2檔案系統問題總結(zt)
- RxJava2 操作符總結RxJava
- 關於控制檔案的總結
- MyBatis配置檔案總結MyBatis
- 檔案路徑總結
- Htaccess檔案用法總結
- RMAN 總結篇 2 - (轉)
- c++ Builder 關於檔案和目錄的操作C++UI