在win環境下,有許多方法可以對文件進行讀寫操作,如MFC 中的CFile類,及一些開源的項目如QT中的QFile。開源的好得是可以多平台,而MFC只是微軟自家的東西,對於想寫跨平台的人,最好不用MFC。
最近在寫開發時,突然碰到了一個問題,也是與讀寫文件有關,不過用的是C的方法,而不是C++,問題的表現是用C 中的Open創建的文件都是只讀的,平常很少用這個方法所在網上找了下,才發現這個函數還有一個權限參數,默認是只讀。現將C方式下的兩種文件操作歸納下
open比起fopen是更低級別的IO操作,所以程序需要更多的人工操作
int open(const char *path, int access,int mode)
path 要打開的文件路徑和名稱
access
訪問模式,宏定義和含義如下:
O_RDONLY
1
只讀打開
O_WRONLY
2
只寫打開
O_RDWR
4
讀寫打開
還可選擇以下模式與以上3種基本模式相與:
O_CREAT
0x0100
創建一個文件並打開
O_TRUNC
0x0200
打開一個已存在的文件並將文件長度設置為0,其他屬性保持
O_EXCL
0x0400
未使用
O_APPEND
0x0800
追加打開文件
O_TEXT
0x4000
打開文本文件翻譯CR-LF控制字符
O_BINARY
0x8000
打開二進制字符,不作CR-LF翻譯
mode
該參數僅在access=O_CREAT方式下使用,其取值如下:
S_IFMT
0xF000
文件類型掩碼
S_IFDIR
0x4000
目錄
S_IFIFO
0x1000 FIFO
專用
S_IFCHR
0x2000
字符專用
S_IFBLK
0x3000
塊專用
S_IFREG
0x8000
只為0x0000
S_IREAD
0x0100
可讀
S_IWRITE
0x0080
可寫
S_IEXEC
0x0040 可執行
FILE *fopen(char *filename, char *mode)
filename
文件名稱
mode
打開模式:
r
只讀方式打開一個文本文件
rb
只讀方式打開一個二進制文件
w
只寫方式打開一個文本文件
wb
只寫方式打開一個二進制文件
a
追加方式打開一個文本文件
ab
追加方式打開一個二進制文件
r+
可讀可寫方式打開一個文本文件
rb+
可讀可寫方式打開一個二進制文件
w+
可讀可寫方式創建一個文本文件
wb+
可讀可寫方式生成一個二進制文件
a+
可讀可寫追加方式打開一個文本文件
ab+ 可讀可寫方式追加一個二進制文件
open和fopen的區別:
前者屬於低級IO,後者是高級IO。
前者返回一個文件描述符,後者返回一個文件指針。
前者無緩沖,後者有緩沖。
前者與 read, write 等配合使用, 後者與 fread, fwrite等配合使用。
後者是在前者的基礎上擴充而來的,在大多數情況下,用後者。