步骤如下:
1、数据流:程序与数据间的交互是以流的形式进行。在C语言文件存取时,打开文件操作,关闭数据流。
2、缓冲区:程序执行时,提供的额外内存以暂时存放数据。缓冲区作用是为了提高存取效率,内存的存取速度比磁盘快。
3、文件类型:分为文本文件和二进制文件两种。
补充:
1、文本文件:字符编码的方式进行保存。
2、二进制文件:内存中的数据原封不动至文件中,适用于非字符为主的数据。
1.用文件操作函数就可以实现读取和保存。打开函数fopen,mode参数设置为“r”就可以使用fscanf函数读取文件内容。用fclose函数就可以实现保存并关闭文件。
2.对于程序来说,不管后缀名如何,文件分为两种类型:文本文件和二进制文件。
c语言里有一系列文件操作函数。区分文本和二进制文件,需要在打开文件时设置不同的控制符mode的变量即可。
3.fopen的函数原型:file
*
fopen(const
char
*
path,const
char
*
mode);
fopen函数的第一个参数是文件路径,第二个参数是打开方式,有以下几种方式:
r
以只读方式打开文件,该文件必须存在。
r+
以可读写方式打开文件,该文件必须存在。
rb+
读写打开一个二进制文件,允许读数据。
rw+
读写打开一个文本文件,允许读和写。
w
打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+
打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a
以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(eof符保留)
a+
以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
(原来的eof符不保留)
wb
只写打开或新建一个二进制文件;只允许写数据。
wb+
读写打开或建立一个二进制文件,允许读和写。
wt+
读写打开或着建立一个文本文件;允许读写。
at+
读写打开一个文本文件,允许读或在文本末追加数据。
ab+
读写打开一个二进制文件,允许读或在文件末追加数据。
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b
字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。
使用read()函数以下为的介绍
函数名:read
功 能:从文件中读
函数原型 :int read(int handle, void *buf, int nbyte);
表头文件:#include <unistd.h>
函数说明:read()会把参数handle所指的文件传送nbyte个字节到buf指针所指的内存中。若参数nbyte为0,则read()不会有作用并返回0。返回值为实际读取到的字节数,如果返回0,表示已到达文件尾或无可读取的数据。
程序例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
#include <io.h>
#include <alloc.h>
#include <fcntl.h>
#include <process.h>
#include <sysstat.h>
int main(void)
{
void *buf;
int handle, bytes;
buf = malloc(10);
/*
Looks for a file in the current directory named TEST.$$$ and attempts
to read 10 bytes from it.To use this example you should create the
file TEST.$$$
*/
if ((handle =
open("TEST.$$$", O_RDONLY | O_BINARY, S_IWRITE | S_IREAD)) == -1)
{
printf("Error Opening File
");
exit(1);
}
if ((bytes = read(handle, buf, 10)) == -1) {
printf("Read Failed.
");
exit(1);
}
else {
printf("Read: %d bytes read.
", bytes);
}
return 0;
}
2Linux C
编辑
定义函数
ssize_t read(int fd, void *buf, size_t count);
返回值
成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次read返回0。
参数
参数count是请求读取的字节数,读上来的数据保存在缓冲区buf中,同时文件的当前读写位置向后移。注意这个读写位置和使用C标准I/O库时的读写位置有可能不同,这个读写位置是记在内核中的,而使用C标准I/O库时的读写位置是用户空间I/O缓冲区中的位置。比如用fgetc读一个字节,fgetc有可能从内核中预读1024个字节到I/O缓冲区中,再返回第一个字节,这时该文件在内核中记录的读写位置是1024,而在FILE结构体中记录的读写位置是1。注意返回值类型是ssize_t,表示有符号的size_t,这样既可以返回正的字节数、0(表示到达文件末尾)也可以返回负值-1(表示出错)。
read函数返回时,返回值说明了buf中前多少个字节是刚读上来的。有些情况下,实际读到的字节数(返回值)会小于请求读的字节数count,例如:读常规文件时,在读到count个字节之前已到达文件末尾。例如,距文件末尾还有30个字节而请求读100个字节,则read返回30,下次read将返回0。
#include <stdio.h>
#include <stdlib.h>
//PRINTBIT 用于把一无符号整数翻译成二进制串
void PRINTBIT(unsigned int number)
{
unsigned int i;
unsigned int ckecker=1;//ckecker 用于指示由右至左的位数,初置设为 1
ckecker<<=8-1;//将 ckecker 中非零位移到其机器表示的最左边
//下一语句从左至右打印各位,每四位之间留一空隔
for (i=1;i<=8;i++)
{
//打印 ckecker 非零位所对应的 number 中对应位
putchar((number & ckecker)?'1':'0');
if (i%4==0)//每4位用空格隔开
putchar(' ');
ckecker>>=1;//准备打印 number 中的下一位
}
putchar('
');
}
int main(void)
{
FILE *fp;
char *filename = "in1.dat";
char ch;
if((fp=fopen(filename,"rb"))== NULL )
{
printf("Can not open %s!
",filename);
exit(0);
}
printf("原字符 二进制
");
ch=fgetc(fp);//取字符
while(!feof(fp))
{
putchar(ch);
putchar(' ');
PRINTBIT(ch);
ch=fgetc(fp);
}
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
000029
-tx1选项表示将文件中的字节以十六进制的形式列出来,每组一个字节(类似hexdump的-c选项)
-tc选项表示将文件中的ASCII码以字符形式列出来(和hexdump类似,输出结果最左边的一列是文件中的地址,默认以八进制显示)
-Ax选项要求以十六进制显示文件中的地址
声明: 我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本站部分文字与图片资源来自于网络,转载是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们(管理员邮箱:daokedao3713@qq.com),情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!
本站内容仅供参考,不作为诊断及医疗依据,如有医疗需求,请务必前往正规医院就诊
祝由网所有文章及资料均为作者提供或网友推荐收集整理而来,仅供爱好者学习和研究使用,版权归原作者所有。
如本站内容有侵犯您的合法权益,请和我们取得联系,我们将立即改正或删除。
Copyright © 2022-2023 祝由师网 版权所有
邮箱:daokedao3713@qq.com