写个读MP3文件程序才发现自己对c的文件操作太不了解了。资料整理如下:
FILE *fopen(const char *filename, const char *mode);<stdio.h>
打开模式选项常见的"w","r","a","w+","r+"(文件必须存在),"a+"操作ASCII文件,"b"表示操作二进制文件。函数成功执行返回文件指针,否则返回null。
int _sopen(const char *filename, int oflag, int shflag[ ,int pmode]);<io.h>\<fcntl.h>\<sys/types.h>\<sys/stat.h>\<share.h>
errno_t _sopen_s(int *pfh, const char *filename, int oflag, int shflag,
int pmode);<io.h>\<fcntl.h>\<sys/types.h>\<sys/stat.h>\<share.h>
以共享形式打开文件,打开模式oflag:_O_APPEND追加模式;_O_BINARY二进制(未转义成ASCII)模式;_O_CREAT创建并写新文件......
共享模式shflag:_SH_DENYRW拒绝其它程序的读写操作,_SH_DENYWR拒绝其它程序写,_SH_DENYRD拒绝其它程序读,_SH_DENYNO允许读写
当oflag为_O_CREAT时pmode才需要,如果文件不存在,pmode指定文件权限,否则,pmode可以被忽略
函数成功执行,返回文件描述符,否则返回-1
int _fstat(int fd, struct _stat *buff);<sys/stat.h>\<sys/types.h>
获取打开文件信息
fd:打开文件描述符。buff:指向存储结果的结构体
获取文件信息成功返回0,否则-1
注意定义在<sys/stat.h>中的struct stat
struct stat {
_dev_t st_dev;
_ino_t st_ino;
unsigned short st_mode;
short st_nlink;
short st_uid; //用户id
short st_gid; //组id
_dev_t st_rdev;
_off_t st_size; //文件大小
time_t st_atime; //最后访问文件时间
time_t st_mtime; //最后修改文件时间
time_t st_ctime; //文件创建时间
};
size_t fread(void *buff, size_t size, size_t count, FILE *stream);<stdio.h>
size_t fwrite(void *buff, size_t size, size_t count, FILE *stream);<stdio.h>
int fscanf(FILE *stream, const char *format[, argument]...);<stdio.h>
int fprintf(FILE *dtream, const char *format[, argument]...);<stdio.h>
文件读写时最好用fread与fwrite,不会因为文件中有NULL而文件并未结束而终止读写
测试文件是否结束
int feof(FILE *stream);<stdio.h>
0文件结束,非0文件