文件操作函数: fread 与 fopen
2009-11-18 16:23
295 查看
最近用warmerdam的shptree.c进行单独封装为DLL,然后在组件项目中调用,进行空间索引的时候,总是得不到正确的shapeID,开始怀疑*.qix文件的格式错误,后来以为Tree的内用没有全部写入*.qix,最后发现fread()的时候无法正确读取!
就这样,两天的时间没了~
利用fread(void * _DstBuf,size_t _ElementSize,size_t _Count,FILE * _File)函数进行读取,
fread( buf, sizeof(int), 460, qixfile)的函数返回值为4,也就是说460个元素仅有4个读取成功:(
这个时候,我一直以为缓存有限制?但跟踪到fread()函数内部,发现读文件时因为碰到EOF才返回的,就是说,到了文件结尾!可实际文件没到结尾啊,还有好多字节呢,为什么认为EOF呢??
在回头看,发下fopen()时,参数为"r",默认为文本模式打开。
哎,浪费了我一天多少时间去查bug原因啊。
还是把fopen(),文件打开模式参数记录下来吧(以下内容来源于http://blog.csdn.net/c_bg44/archive/2007/01/01/1472040.aspx):
[C语言]fopen()函数的参数说明[ 2006-10-03 09:24:26 | 作者: bewalking ]
格式:文件指针名=fopen(文件名,使用文件方式)
参数:
文件名 意义
"C://TC//qwe.txt" 文件C:/TC/qwe.txt
"qwe.txt" 和程序在同一目录下的qwe.txt
文件使用方式 意 义
“rt” 只读打开一个文本文件,只允许读数据
“wt” 只写打开或建立一个文本文件,只允许写数据
“at” 追加打开一个文本文件,并在文件末尾写数据
“rb” 只读打开一个二进制文件,只允许读数据
“wb” 只写打开或建立一个二进制文件,只允许写数据
“ab” 追加打开一个二进制文件,并在文件末尾写数据
“rt+” 读写打开一个文本文件,允许读和写
“wt+” 读写打开或建立一个文本文件,允许读写
“at+” 读写打开一个文本文件,允许读,或在文件末追加数 据
“rb+” 读写打开一个二进制文件,允许读和写
“wb+” 读写打开或建立一个二进制文件,允许读和写
“ab+” 读写打开一个二进制文件,允许读,或在文件末追加数据
对于文件使用方式有以下几点说明:
1. 文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是:
r(read): 读
w(write): 写
a(append): 追加
t(text): 文本文件,可省略不写
b(banary): 二进制文件
+: 读和写
2. 凡用“r”打开一个文件时,该文件必须已经存在, 且只能从该文件读出。
3. 用“w”打开的文件只能向该文件写入。 若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。
4. 若要向一个已存在的文件追加新的信息,只能用“a ”方式打开文件。但此时该文件必须是存在的,否则将会出错。
5. 在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。
fread函數
原形:t_size fread(void *, t_size, t_size, FILE *);
例:
int c;
char ppp[100];
c = fread(ppp, sizeof(char), 2, myfile);
從myfile所指文件中讀取2個單位的char所佔字節的數據到ppp所緻的緩衝區中,返回成功讀取的量數。
第二個參數為“單位”,第三個參數為“n個單位”。
就这样,两天的时间没了~
利用fread(void * _DstBuf,size_t _ElementSize,size_t _Count,FILE * _File)函数进行读取,
fread( buf, sizeof(int), 460, qixfile)的函数返回值为4,也就是说460个元素仅有4个读取成功:(
这个时候,我一直以为缓存有限制?但跟踪到fread()函数内部,发现读文件时因为碰到EOF才返回的,就是说,到了文件结尾!可实际文件没到结尾啊,还有好多字节呢,为什么认为EOF呢??
在回头看,发下fopen()时,参数为"r",默认为文本模式打开。
哎,浪费了我一天多少时间去查bug原因啊。
还是把fopen(),文件打开模式参数记录下来吧(以下内容来源于http://blog.csdn.net/c_bg44/archive/2007/01/01/1472040.aspx):
[C语言]fopen()函数的参数说明[ 2006-10-03 09:24:26 | 作者: bewalking ]
格式:文件指针名=fopen(文件名,使用文件方式)
参数:
文件名 意义
"C://TC//qwe.txt" 文件C:/TC/qwe.txt
"qwe.txt" 和程序在同一目录下的qwe.txt
文件使用方式 意 义
“rt” 只读打开一个文本文件,只允许读数据
“wt” 只写打开或建立一个文本文件,只允许写数据
“at” 追加打开一个文本文件,并在文件末尾写数据
“rb” 只读打开一个二进制文件,只允许读数据
“wb” 只写打开或建立一个二进制文件,只允许写数据
“ab” 追加打开一个二进制文件,并在文件末尾写数据
“rt+” 读写打开一个文本文件,允许读和写
“wt+” 读写打开或建立一个文本文件,允许读写
“at+” 读写打开一个文本文件,允许读,或在文件末追加数 据
“rb+” 读写打开一个二进制文件,允许读和写
“wb+” 读写打开或建立一个二进制文件,允许读和写
“ab+” 读写打开一个二进制文件,允许读,或在文件末追加数据
对于文件使用方式有以下几点说明:
1. 文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是:
r(read): 读
w(write): 写
a(append): 追加
t(text): 文本文件,可省略不写
b(banary): 二进制文件
+: 读和写
2. 凡用“r”打开一个文件时,该文件必须已经存在, 且只能从该文件读出。
3. 用“w”打开的文件只能向该文件写入。 若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。
4. 若要向一个已存在的文件追加新的信息,只能用“a ”方式打开文件。但此时该文件必须是存在的,否则将会出错。
5. 在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。
fread函數
原形:t_size fread(void *, t_size, t_size, FILE *);
例:
int c;
char ppp[100];
c = fread(ppp, sizeof(char), 2, myfile);
從myfile所指文件中讀取2個單位的char所佔字節的數據到ppp所緻的緩衝區中,返回成功讀取的量數。
第二個參數為“單位”,第三個參數為“n個單位”。
相关文章推荐
- php中file文件操作函数readfile fread fgets fgetc以及不需要加fopen的file_get_contents file_put_contents file()
- c语言中所有文件操作函数详解fopen、fwrite、fread、fgetc、fputc、fscanf、fprintf、ftell、fseek等函数
- C文件操作——fopen/fseek/ftell/fread/fwrite/fclose等函数用法
- c语言中所有文件操作函数详解fopen、fwrite、fread、fgetc、fputc、fscanf、fprintf、ftell、fseek等函数
- [小结]C语言的文件操作函数fopen,fread,fwrite注意点
- php中file文件操作函数readfile fread fgets fgetc以及不需要加fopen的file_get_contents file_put_contents file()
- linux c语言之文件操作相关函数--fopen(),fopen_s(),fread(),fwrite(),fclose(),
- c语言中所有文件操作函数详解fopen、fwrite、fread、fgetc、fputc、fscanf、fprintf、ftell、fseek等函数
- fgetc()/fputc()/fgets()/fputs()/fread()/fwrite()/fopen()/fclose() 等C语言文件操作函数
- 15:文件操作(C标准库函数)fopen/fclose/fread/fwrite/fseek/fprintf/fscanf
- fopen相关文件操作函数
- C++文件读写函数之——fopen、fread和fwrite、fgetc和fputc、fgets和fputs、ftellf和fseek、rewind
- fopen , fread fwrite 函数读写二进制文件 问题总结
- 文件操作函数fopen()使用笔记
- fread()和fwrite()函数读写文件操作
- [Linux流操作]使用fread和fwrite函数读写文件
- (转载)C++文件读写函数之——fopen、fread和fwrite、fgetc和fputc、fgets和fputs、ftellf和fseek、rewind
- matlab文件操作fopen-fseek-fread-fclose等
- 文件操作open与fopen和read与fread的区别
- php 在linux 用fopen() 函数打开,file_get_contents(),fread()函数 读取 另外一台服务器映射过来的文件 总是返回false,null的情况。