fread读取二进制文件,C语言fread函数读取文件问题
fread读取二进制文件,C语言fread函数读取文件问题详细介绍
本文目录一览: 读取二进制文件的函数调用形式为:fread(buffer size,count,fp);,其中buffer代表的是( )。
【答案】:C
head函数中的参数buffer是内存块的首地址,输入的数据存入此内存块中。
php如何读取文本
php如何读取文本?php中读取文件内容的几种方法1.freadstring fread ( int $handle , int $length )fread() 从 handle 指向的文件中读取最多 length 个字节。该函数在读取完最多 length 个字节数,或到达 EOF 的时候,或(对于网络流)当一个包可用时,或(在打开用户空间流之后)已读取了 8192 个字节时就会停止读取文件,视乎先碰到哪种情况。推荐:《PHP教程》fread() 返回所读取的字符串,如果出错返回 FALSE。
如果所要读取的文件不是本地普通文件,而是远程文件或者流文件,就不能用这种方法,因为,filesize不能获得这些文件的大小。此时,你需要通过feof()或者fread()的返回值判断是否已经读取到了文件的末尾。例如:
或者:
2.fgetsstring fgets ( int $handle [, int $length ] )fgets()从 handle 指向的文件中读取一行并返回长度最多为 length - 1 字节的字符串。碰到换行符(包括在返回值中)、EOF 或者已经读取了 length - 1 字节后停止(看先碰到那一种情况)。如果没有指定 length,则默认为 1K,或者说 1024 字节。
Note: length 参数从 PHP 4.2.0 起成为可选项,如果忽略,则行的长度被假定为 1024。从 PHP 4.3 开始,忽略掉 length 将继续从流中读取数据直到行结束。如果文件中的大多数行都大于 8KB,则在脚本中指定最大行的长度在利用资源上更为有效。从 PHP 4.3 开始本函数可以安全用于二进制文件。早期的版本则不行。3.fgetssstring fgetss ( resource $handle [, int $length [, string $allowable_tags ]] )跟fgets功能一样,但是fgetss会尝试从读取的文本中去掉任何 HTML 和 PHP 标记,可以用可选的第三个参数指定哪些标记不被去掉。
<!--?php $handle = fopen('./file.txt', 'r'); while(!feof($handle)){ echo fgetss($handle, 1024, ''); } fclose($handle);?>4.filearray file ( string $filename [, int $use_include_path [, resource $context ]] )将文件内容读入一个数组中,数组的每一项对应文件中的一行,包括换行符在内。不需要行结束符时可以使用 rtrim() 函数过滤换行符。
$content){ echo 'line '.($line + 1).':'.$content; }?> 5.readfileint readfile ( string $filename [, bool $use_include_path [, resource $context ]] )读入一个文件并写入到输出缓冲。返回从文件中读入的字节数。如果出错返回 FALSE 并且除非是以 @readfile() 形式调用,否则会显示错误信息。
6.file_get_contentsstring file_get_contents ( string $filename [, bool $use_include_path [, resource $context [, int $offset [, int $maxlen ]]]] )将文件读入一个字符串。第三个参数$context可以用来设置一些参数,比如访问远程文件时,设置超时等等。另外,file_get_contents相对于以上几个函数,性能要好得多,所以应该优先考虑使用file_get_contents。但是readfile貌似比file_get_contents性能好一点(?),因为它不需要调用fopen。
array( 'timeout' => 1 //设置超时 ) ) ); echo file_get_contents("http://www.baidu.com/", 0, $ctx); ?>7.fpassthru int fpassthru ( resource $handle )将给定的文件指针从当前的位置读取到 EOF 并把结果写到输出缓冲区。
几个注意事项:1. 鼓励在处理二进制文件时使用 b 标志,即使系统并不需要,这样可以使脚本的移植性更好。 2. allow_url_fopen选项激活了 URL 形式的 fopen 封装协议使得可以访问 URL 对象例如文件。默认的封装协议提供用 ftp 和 http 协议来访问远程文件,一些扩展库例如 zlib 可能会注册更多的封装协议。出于安全性考虑,此选项只能在 php.ini 中设置。3. 如果要打开有特殊字符的 URL (比如说有空格),就需要使用 urlencode() 进行 URL 编码。
如何使用fread函数循环读取二进制文件
在读写二进制文件的时候,必须确保文件的打开形式是以 二进制读写的形式打开的, 即:文件的打开形式必须是 "rb", "wb" 要不然,读写数据的时候,就会出现错误。 函数使用说明: FILE * fopen(const char * path,const char * mode); 参数path字
在读写二进制文件的时候,必须确保文件的打开形式是以
二进制读写的形式打开的,
即:文件的打开形式必须是
"rb",
"wb"
要不然,读写数据的时候,就会出现错误。
函数使用说明:
file
*
fopen(const
char
*
path,const
char
*
mode);
参数path字符串包含欲打开的文件路径及文件名,
参数mode字符串则代表着流形态。mode有下列几种形态字符串:
r
打开只读文件,该文件必须存在。
r+
打开可读写的文件,该文件必须存在。
rb+
读写打开一个二进制文件,只允许读写数据。
rt+
读写打开一个文本文件,允许读和写。
w
打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+
打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a
以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(eof符保留)
a+
以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
(原来的eof符不保留)
wb
只写打开或新建一个二进制文件;只允许写数据。
wb+
读写打开或建立一个二进制文件,允许读和写。
wt+
读写打开或着建立一个文本文件;允许读写。
at+
读写打开一个文本文件,允许读或在文本末追加数据。
ab+
读写打开一个二进制文件,允许读或在文件末追加数据。
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b
字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在posix系统,包含linux都会忽略该字符。由fopen()所建立的新文件会具有s_irusr|s_iwusr|s_irgrp|s_iwgrp|s_iroth|s_iwoth(0666)权限,此文件权限也会参考umask
值。
有些c编译系统可能不完全提供所有这些功能,有的c版本不用"r+","w+","a+",而用"rw","wr","ar"等,读者注意所用系统的规定。
返回值
文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回null,并把错误代码存在errno
中
附加说明
一般而言,开文件后会作一些文件读取或写入的动作,若开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误判断及处理。
fread函数和fwrite函数
1.函数功能
用来读写一个数据块。
2.一般调用形式
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
3.说明
(1)buffer:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。
(2)size:要读写的字节数;
(3)count:要进行读写多少个size字节的数据项;
(4)fp:文件型指针。
fread如何读取二进制文件到二维数组中
用 fopen 打开文件时 设 "rb" --用二进制方法打开,用于读
用 fread 读取数据,函数原型是:
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
各参数意义,请查编译器帮助文件,这里就不开课了。
300×300 的数组需要的内存量较大,可动态分配,或用 全局量。
下面是程序例子。先建了一个2进制文件,里面存了300*300个float型数据。然后读这个文件里的内容。
#include
float a[300][300];
int main()
{
FILE *fin, *fout;
int i,j;
for (j=0;j<300;j++) for (i=0;i<300;i++) a[j][i]=j*100+i;
fout=fopen("a.txt","wb");
for (j=0;j<300;j++)
fwrite(&a[j][0],sizeof(float),300,fout);
fclose(fout);
for (j=0;j<300;j++) for (i=0;i<300;i++) a[j][i]=0; //数组清零
fin=fopen("a.txt","rb"); //打开输入文件
for (j=0;j<300;j++)
fread(&a[j][0],sizeof(float),300,fin); //读文件
fclose(fin); //关闭文件
// 下面输出文件的左上角100个数据,和右下角100个数据供检查参考。
for (j=0;j<10;j++) {
for (i=0;i<10;i++)printf("%3.0f ",a[j][i]); printf("\n");}
printf("\n");
for (j=290;j<300;j++){
for (i=290;i<300;i++)printf("%g ",a[j][i]); printf("\n");}
return 0;
}
Matlab中如何实现二进制文件的读写?
1)写二进制文件
fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。其调用格式为: COUNT=fwrite(fid,A,'precision')
说明:其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度有:char、uchar、int、long、float、double等。缺省数据精度为uchar,即无符号字符格式。 例6.8 将一个二进制矩阵存入磁盘文件中。 >> a=[1 2 3 4 5 6 7 8 9];
>> fid=fopen('d:\test.bin','wb') %以二进制数据写入方式打开文件 fid =
3 %其值大于0,表示打开成功 >> fwrite(fid,a,'double') ans =
9 %表示写入了9个数据 >> fclose(fid) ans =
0 %表示关闭成功
2)读二进制文件
fread函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为: [A,COUNT]=fread(fid,size,'precision')
说明:其中A是用于存放读取数据的矩阵、COUNT是返回所读取的数据元素个数、fid为文件句柄、size为可选项,若不选用则读取整个文件内容;若选用则它的值可以是下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。precision用于控制所写数据的精度,其形式与fwrite函数相同。
%写一维数据至数据文件 n=0:pi/10:4*pi; y=sin(n);
fip=fopen('C:\binary3.bin','wb'); fwrite(fip,Pxx,'double'); fclose(fip);
fread函数 读取二进制文件每次读取8位,怎么写
8位就是一个字节呀。
char c;
fread(&c, 1, 1, fp);
#include
#include
//读取字节数#define READ_BYTES 1int main(){ //打开文件 FILE *fp = fopen("文件名", "rb"); //rb:以二进制方式读取 if(fp == NULL) { printf("文件打开失败!"); return -1; } //一次读取READ_BYTES字节,当READ_BYTES=1时为8位(1字节=8bit) int rc; char buff[READ_BYTES]; while((rc=fread(buff, 1, READ_BYTES, fp)) != 0) { //读取的结果在buff中,处理逻辑如下 //... } //关闭文件 fclose(fp); return 0;}
怎么打开二进制文件?
问题一:如何查看二进制文件的文件内容? 10分 用UltraEdit这个软件
问题二:UltraEdit 怎么看二进制文件 【◆】【你好】【◆】
.
UltraEdit提供了这样的功能,它能够显示二进制文件的内容,即将二进制代码显示为十六进制。
.
按Ctrl+H键或者有一个二进制的图标.16进制 其实就是2进制。
16进制 就是 为了 输入和输出 方便和简单
你只要 把 1 看成 0001 把 F 看成 1111
.
如果你认为我的解答对解决你的问题有帮助.请点击我的回答下方【选为满意答案】按钮.
问题三:如何查看txt文件的二进制文件 c++ 可以读取二进制文件即.bin形式的 FILE * fb ; fb = fopen(文件路径/文件名.bin, rb);
fread(H_imag, sizeof(float), len, fb);
fclose(fb); len是数据的长度
问题四:C++中怎么打开一个二进制文件 估计你对二进制文件概念搞错了,你现在写的是二进制文件(就是计算机内部的格式),这好比电报码不经过译码你是看不懂的。我们能看懂的无论是10进制,16进制,2进制数其实都是从计算机内部的格式(2进制的码)转换出来的文本( 包括楼上说看到四字节05 00 00 00实际上也是用查看工具转出的16进制文本),因此,能看到的2进制数101,实际上是个“101”文本,并不是真正的2进制的码。如果你要保存5的 “二进制码” ,要通过文本查看器就能看到“101”,你实际上要写5的“二进制文本”而不是写“二进制码”。
问题五:在c语言中如何打开二进制文件 不知lz希望得骇什么
二进制的意思是按照数据的原有二进制值写入
与文本模式的差别是不处理行尾
“china” 的 ASCII 就是这样子,还能是什么
问题六:如何把EXE文件打开成二进制文件 您好。
将其导入ultra edit,里面有导出二进制文件选项
有各最简单的方法,windows其实自带了一个这样的工具exe2bin.exe在运行里输入cmd打开msdos方式,里面输入
c:\>exe2bin /?
就可以查看一下这个命令的方式,比如
c:\>exe2bin c:\a.exe b.bin
再用记事本查看就可以了,不过这种方法只能对exe文件有效。
如果还有问题,可以继续追问,感谢。
问题七:如何查看二进制文件的内容 用WINHEX之类的二进制查看软件打开文件即可看到二进制文件的内容。
问题八:如何快速读取二进制文件 Visual C++
如何:读取二进制文件
下面的代码示例演示如何从文件中读取二进制数据。使用了 System.IO 命名空间中的两个类:FileStream 和 BinaryReader。FileStream 表示实际的文件。BinaryReader 为允许二进制访问的流提供接口。
下面的代码示例使用由如何:编写二进制文件中的代码创建的称为 data.bin 的文件。
示例
binary_read.cpp
pile with: /clr
#using
using namespace System;
using namespace System::IO;
int main()
{
String^ fileName = data.bin;
try
{
FileStream^ fs = gew FileStream(fileName, FileMode::Open);
BinaryReader^ br = gew BinaryReader(fs);
Console::WriteLine(contents of {0}:, fileName);
while (br->BaseStream->Position BaseStream->Length)
Console::WriteLine(br->ReadInt32().ToString());
fs->Close( );
}
catch (Exception^ e)
{
if (dynamic_cast(e))
Console::WriteLine(File '{0}' not found, fileName);
else
Console::WriteLine(Exception: ({0}), e);
return -1;
}
return 0;
}
补充
手上的一个VB项目(过程中发现,.Net果然是好啊),需要在一个ActiveX中实现HTTP下载功能,我是采用InternetreadFile这个API来实现,一开始的代码我是这么写的
Function Getdownload(sUrl As String) As boolen
Dim s As String
Dim hOpen As Long
Dim hOpenUrl As Long
Dim bDoLoop As Boolean
Dim bRet As Boolean
Dim sReadBuffer As String * 2048
Dim lNumberOfBytesRead As Long
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
hOpenUrl = InternetOpenUrl(hOpen, sUrl, vbNullString, 0, ......>>
问题九:c++为什么无法打开二进制文件 添加位ios::in或ios::out。即fstream file(data.dat,ios::binary|ios:in);
问题十:linux 怎么看完二进制文件 查看二进制文件,用od或hexdump命令。
$ od -tx1 -tc -Ax binFile000000 61 62 63 64 65 31 32 33 34 35 61 62 63 64 65 31 a b c d e 1 2 3 4 5 a b c d e 1000010 32 33 34 35 61 62 63 64 65 31 32 33 34 35 61 62 2 3 4 5 a b c d e 1 2 3 4 5 a b000020 63 64 65 31 32 33 34 35 0a c d e 1 2 3 4 5 \n000029
-tx1选项表示将文件中的字节以十六进制的形式列出来,每组一个字节(类似hexdump的-c选项)
-tc选项表示将文件中的ASCII码以字符形式列出来(和hexdump类似,输出结果最左边的一列是文件中的地址,默认以八进制显示)
-Ax选项要求以十六进制显示文件中的地址
fread函数的用法
在文本文件(这个txt文件)中,45是以字符串形式保存的,也就是说,实际上保存的是45这两个字符的ASCII值,也就是0x34和0x35,也就是十进制数字52和53,而fread()又是一个二进制读取函数,所以用它读取的数值就是这两个数值。
要想读取出45这个数字,应该用fscanf()函数。
#include
int main()
{
FILE * fp;
int a=45;
int b;
fp=fopen("1.txt","wb+");
fwrite(&a,sizeof(int),1,fp);///将a值写到文件中.这句起作用,移动了文件指针。
fseek(fp,0,0);//将文件指针移回首部
fread(&b,sizeof(int),1,fp);
printf("b is %d\n\n",b);
fclose(fp);
return 0;
}
fread读的是二进制的数据,你在文件里如果直接键盘敲的45,是不能正确读出来的。
试试先把一个int型数据fwrite进文件里,再用fread读出来.
你读的是4个ASC码,当然不对,先读到字符串中,再变int
fread函数可从文件中读取二进制数据
语法:
A = fread(fid, count)
A = fread(fid, count, precision)
其中fid为指针所指文件中的当前位置,count指读取的数据个数, precision表示以什么格式的数据类型读取数据。
例子:
fid = fopen('alphabet.txt', 'r');c = fread(fid, 5)'c =65 66 67 68 69fclose(fid);
程序说明:alphabet文件中按顺序存储着26个英文字母,读取文件之前要先打开文件,由于未指定读取数据的类型,所以程序指定默认类型为无符号字符型即uchar,65、66、67、68、69代表A、B、C、D、E,文件用完还要记得关闭文件,以便释放指针。
扩展资料:用 法
int feof(FILE *stream);
参数
流 :FILE结构的指针
注意:feof判断文件结束是通过读取函数fread/fscanf等返回错误来识别的,故而判断文件是否结束应该是在读取函数之后进行判断。比如,在while循环读取一个文件时,如果是在读取函数之前进行判断,则如果文件最后一行是空白行,可能会造成内存错误。
参考资料:fread--百度百科
C语言fread函数读取文件问题
你写入文本文件后,数据是用ASCII码串的形式来表示,已经不是二进制数据了,因此需要用fscanf函数来读取,试试如下程序:
#include
#include
struct hj
{
char dianh[10];
long int x;
long int y;
char gaoc[10];
}
main()
{
int i;
struct hj d[10];
FILE *fp;
char s1[10];
fp=fopen("123.txt","r+");
for(i=0;i<2;i++)
{
fscanf(fp,"%s\t%d\t%d\t%s %s",&d[i].dianh,&d[i].x,&d[i].y,&d[i].gaoc,&s1);
strcat(d[i].gaoc,s1);
}
fclose(fp);
}
fread是用二进制方式读取二进制文件,读取的数据必须是用对应的fwrite写入的,而你读取的是文本格式的文件当然就不行了!
你可以试试用fscanf读取。
读取字节出错了 应该是28字节 而不是20 最好用siezof(struct hj)
不要你手动输入数据 最好用程序将数据整块写入文本中 要吗你就用fscanf 和fsprintf对应着来
fread(&d[i],20,1,fp);这句不是读的
比如 freed(p,20,1,fp) p是一个已经分配的空间的指针 fread(d[j].dianh,10,1,lp);
freed(d[j].gaoc,10,1,lp);
fread是一个函数。从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。
函数原型
size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;
参 数
buffer
用于接收数据的内存地址
size
要读的每个数据项的字节数,单位是字节
count
要读count个数据项,每个数据项size个字节.
stream
输入流
返回值
实际读取的元素个数。如果返回值与count不相同,则可能文件结尾或发生错误。从ferror和feof获取错误信息或检测是否到达文件结尾。