导航:首页 > 文件教程 > tffs二进制文件读写

tffs二进制文件读写

发布时间:2023-04-26 11:57:25

1. c#二进制文件的写入和读取

c#二进制文件的写入和读取,参考代码如下:

usingSystem;
usingSystem.IO;

publicclassFileApp
{
publicstaticvoidMain()
{
//在当前目录创建一个文件myfile.txt,对该文件具有读写权限
FileStreamfsMyfile=newFileStream("myfile.txt",FileMode.Create,FileAccess.ReadWrite);

//创建一个数据流写入器,和打开的文件关联
StreamWriterswMyfile=newStreamWriter(fsMyfile);

//以文本方式写一个文件
swMyfile.WriteLine("Hello,World");
swMyfile.WriteLine("abcdefghijklmnopqrstuvwxyz");
swMyfile.WriteLine("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
swMyfile.WriteLine("0123456789");

//冲刷数据(把数据真正写到文件中去)
//注释该句试试看,程序将报错
swMyfile.Flush();

//以文本方式读文件
//创建一个数据流读入器,和打开的文件关联
StreamReadersrMyfile=newStreamReader(fsMyfile);

//把文件指针重新定位到文件的开始
srMyfile.BaseStream.Seek(0,SeekOrigin.Begin);

//打印提示信息
Console.WriteLine("****************以文本方式读文件*********************");

//打印文件文本内容
strings1;
while((s1=srMyfile.ReadLine())!=null)
{
Console.WriteLine(s1);
}
Console.WriteLine();
//以文本方式读文件结束


//以二进制方式读文件
//创建一个二进制数据流读入器,和打开的文件关联
BinaryReaderbrMyfile=newBinaryReader(fsMyfile);

//把文件指针重新定位到文件的开始
brMyfile.BaseStream.Seek(0,SeekOrigin.Begin);

//打印提示信息
Console.WriteLine("****************以二进制方式读文件*********************");

//打印文件文本内容
Byteb1;
while(brMyfile.PeekChar()>-1)
{
b1=brMyfile.ReadByte();
//13为" ",表示回车;10为" ",表示换行
if(b1!=13&&b1!=10)
{
Console.Write("{0}",b1.ToString());
Console.Write(".");
}
else
{
Console.WriteLine();
}
}
Console.WriteLine(" ");
//以二进制方式读文件结束

//关闭以上new的各个对象
brMyfile.Close();
srMyfile.Close();
fsMyfile.Close();

//读取文件属性
//打印提示信息
Console.WriteLine("****************读取文件属性*********************");

FileInfofiMyfile=newFileInfo("myfile.txt");
Console.WriteLine("文件名:{0}",fiMyfile.Name);
Console.WriteLine("文件名(含路径):{0}",fiMyfile.FullName);
Console.WriteLine("文件大小(bytes):{0}",fiMyfile.Length);
Console.WriteLine("文件创建时间:{0}",fiMyfile.CreationTime);
}
}

2. C语言读写二进制文件读取 大小端,该怎么解

先看下面的代码,然后我在简短的解释一下。

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <string>#define nmemb 7/****************************************************
Date types(Compiler specific) 数据类型(和编译器相关)
*****************************************************/typedef unsigned char uint8; /* Unsigned 8 bit quantity */typedef signed char int8; /* Signed 8 bit quantity */typedef unsigned short uint16; /* Unsigned 16 bit quantity */typedef signed short int16; /* Signed 16 bit quantity */typedef unsigned int uint32; /* Unsigned 32 bit quantity */typedef signed int int32; /* Signed 32 bit quantity */typedef float fp32; /* Single precision */
/* floating point */typedef double fp64; /* Double precision */
/* floating point *///int32#define BigtoLittle32(A) ((( (uint32)(A) & 0xff000000 ) >> 24) |
(( (uint32)(A) & 0x00ff0000 ) >> 8) |
(( (uint32)(A) & 0x0000ff00 ) << 8) |
(( (uint32)(A) & 0x000000ff ) << 24))//int16#define BigtoLittle16(A) (( ((uint16)(A) & 0xff00) >> 8 ) |
(( (uint16)(A) & 0x00ff ) << 8))/************************************************************
* Conversion little endian float data to big endian
* *************************************************************/float ReverseFloat(const float inFloat)
{ float retVal; char *floatToConvert = (char*) & inFloat; char *returnFloat = (char*) & retVal; // swap the bytes into a temporary buffer
returnFloat[0] = floatToConvert[3];
returnFloat[1] = floatToConvert[2];
returnFloat[2] = floatToConvert[1];
returnFloat[3] = floatToConvert[0]; return retVal;
}struct matrix
{ int row; int column;
}s[nmemb];void set_s(int j, int x, int y)
{
s[j].row = x;
s[j].column = y;
}bool is_bigendian()
{ int a = 0x1234; char b = *(char *)&a; //b == the Low address part of a
//printf("%c ", b);
if (b == 0x34) { return false;
} return true;
}int main()
{ if (is_bigendian()) { printf("BigEndian ");
} else { printf("LittleEndian ");
}

FILE *fp;
set_s(0, 1, 50);
set_s(1, 1, 80);
set_s(2, 4, 20);
set_s(3, 50, 1);
set_s(4, 80, 2);
set_s(5, 100, 3);
set_s(6, 100, 4); int ans = sizeof(struct matrix); printf("size: %d ", ans); printf("size: %d ", sizeof(s)); if ((fp = fopen("test", "wb")) == NULL) { printf("EROOR "); return 1;
} for (int j = 0; j < nmemb; ++j) { printf("row: %d column: %d ", s[j].row, s[j].column);
}
fwrite(s, sizeof(struct matrix), nmemb, fp); for (int i = 0; i < nmemb; ++i) { float *m = (float*) malloc(sizeof(float) * s[i].row * s[i].column);
bzero(m, sizeof(float) * s[i].row * s[i].column); for (int j = 0; j < s[i].row; ++j) { for (int k = 0; k < s[i].column; ++k) {
m[k + j*s[i].column] = k;
}
}
fwrite(m, sizeof(float), s[i].row * s[i].column, fp); free(m);
}

fclose(fp); printf("11 "); /*
printf("%d ", sizeof(float));
FILE *fp;
if ((fp = fopen("test", "rb")) == NULL) {
printf("EROOR ");
return 1;
}
fread(s, sizeof(struct matrix), nmemb, fp);
for (int i = 0; i < nmemb; ++i) {
printf("row: %d column: %d ", s[i].row, s[i].column);
}

for (int i = 0; i < nmemb; ++i) {
float *m = (float*) malloc(sizeof(float) * s[i].row * s[i].column);
bzero(m, sizeof(float) * s[i].row * s[i].column);
fread(m, sizeof(float), s[i].row * s[i].column, fp);
for (int j = 0; j < s[i].row; ++j) {
for (int k = 0; k < s[i].column; ++k) {
printf("%lf ", m[k + j*s[i].column]);
}
printf(" ");
}
printf(" ");
free(m);
}
fclose(fp);
*/
return 0;
}

fopen和fclose是很常见的,在这里就不做解释了。我们来看看fwrite和fread,本来以为这个很麻烦,但是用过之后发现这个二进制文件读写才是最简单的。

size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream);
fwrite()用来将数据写入文件流中。
stream为已打开的文件指针
ptr 指向欲写入的数据地址
写入的字符数以参数size*nmemb来决定。
size表示写入一个nmemb的内存大小。
fwrite()会返回实际写入的nmemb数目。

size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);
fread()用来从文件流中读取数据。
stream为已打开的文件指针
ptr 指向欲存放读取进来的数据空间
读取的字符数以参数size*nmemb来决定
size表示读取一个nmemb的内存大小。
fread()会返回实际读取到的nmemb数目,如果此值比参数nmemb 小,则代表可能读到了文件尾或有错误发生,这时必须用feof()或ferror()来决定发生什么情况。
返回实际读取到的nmemb数目。

详情参见上面的代码。

另外就是大小端的问题了。关于大小端的具体解释网上有很多,在此不作解释。参考上面写的代码,我判断了自己机器是大端还是小端,并且实现了int16,int32已经float数据类型的大小端转换,大端转小端,在使用相同的代码一次小端又变成了大端。

PS:float的大小端转化我之前一直以为写的是错的,因为好多数据转化之后输出都是0。后来发现可能是与float类型在内存中的存放有关,我们的程序是对的。

3. 如何读取二进制文件

快速读取二进制文件的方法如下: 1、打开文件。 打开文件可以有两种方式,第一种可以使用fstream类的构造函数。fstream file("test.dat",ios_base::in|ios_base::out|ios_base::app); 另外一种方法就是使用 open函数。fstream file;file.open("test.dat",ios_base::in|ios_base::out|ios_base::app); 这样就可以打开一个可读写的文件了。如果文件不存在的话,就会创建一个新文件并且以读写方式打开。这里需要说明一点,如果文件不存在的话,open函数中第二个参数必须包含ios_base::out|ios_base::app,否则就不能正确创建文件。 2、写文件。 先进性写文件的操作否则读一个空文件是没有意义的。 既然是写二进制文件可以向文件中写入一个整形值。写二进制字符只能使用write 函数。但是write函数的原形是write(const char * ch, int size)。第一个参数是char * 类型,所以需要把将要写入文件的int类型转换成char *类型。这里的转换困扰了我好几天,不过终于弄明白了。代码如下。int temp; file.write((char *)(&temp),sizeof(temp)); 3、读文件。 可以写文件了,读文件就好办多了。读文件需要用到read函数。其参数和write 大致相同,read(const char * ch, int size)。要把内容读到int类型变量中同样涉及到一个类型转换的问题。和写文件一样。int readInt; file.read((char(&readInt),sizeof(readInt)); 这样文件中的int值就读入到int型变量 readInt中了。 4、文件指针。 在文件的读写过程中往往需要对文件进行选择性读取。所以需要进行文件指针的移动。这是需要用到seekg和seekp函数。在fstream类中有两个文件指针,一个是读取文件的指针 ,一个是写文件的指针分别用tellg和tellp文件来取得指针的位置。同样seekg和seekp两个函数分别是对这两个指针进行移动的函数。这两个函数的参数都是一样的。先对几个枚举类型进行一下说明: ios_base::beg ——文件开始位置ios_base::cur ——文件当前位置ios_base::end ——文件末尾位置下面以seekg为例说明一下指针移动的方法:file.seekg(3) ——指针移动到第三个字符的位置file.seekg(ios_base::beg) ——指针移动到文件开头file.seekg(ios_base::end) ——指针移动到文件末尾file.seekg(-3,ios_base::cur) —— 指针当前位置向前移动三个字符file.seekg(3,ios_base::cur) ——指针当前位置向后移动三个字符file.seekg(3,file.tellg()) ——指针当前位置向后移动三个字符file.seekg(file.tellg()+3) ——指针当前位置向后移动三个字符 5、对文件操作完毕后别忘了关闭文件。

4. 二进制文件的如何使用语句操作二进制文件

我们将上面的那个二进制文件保存为:TestBin.Bin 来举例。读取和写入二进制其实是两个很类似的操作,了解了其中之一,另一个也就不难了。
二进制文件我们通常使用直接读取方式,Open 语句可以写为:
引用:
Open( 12 , File = 'TestBin.Bin' , Access = 'Direct' , Form = 'Unformatted' , RecL = 4 )
上面的 Access 表示直接读取方式,Form 表示无格式储存。比较重要的是 RecL 。我们读取数据时,是用记录来描述单位的,每一次读入或写入是一个记录。记录的长度在 Open 时饥碰就确定下来,以后不能改变。如果需要改变,只能 Close 以后再此 Open。记录长姿巧度在某些编译器下表示读取的 4 字节长度的倍数,规定为 4 表示记录长度为 16 字节。有些编译器下就直接迹肢键表示记录的字节数,规定为 4 则表示记录长度为 4 字节。这个问题需要参考编译器手册。在 VF 系列里,这个值是前面一个含义。可以通过设置工程属性的 Fortran,Data,Use Bytes as RECL= Unit for Unformatted Files 来改变,使之成为后一个含义。在命令行模式下,则使用 /assume:byterecl 这个编译选项。确定 RecL 大小是我们需要做的事情,一般来说,不适合太大,也不适合太小。还需要结合数据储存方式来考虑。太小的话,我们需要执行读写的次数就多,太大的话,我们就不方便操作小范围的数据。有时候我们甚至会分多次来读取数据,每一次的 RecL 都不同。对于上面的 TestBin.Bin 文件来说,它比较简单,我以 16 字节长度和 8 字节长度两种读取方式来演示,你甚至可以一次 32 个字节长度全部读完。

5. vb.net二进制怎么读取文件

一、二进制文件读写

1、写二进制数据到指定目录

6. C++中怎样进行二进制文件的读写

#include <fstream>

写二进制文件应该使用ofstream类,文件的打开模式一定要是 binary,如果传入的不是 binary, 文件将以ASCII方式打开。

下面是示例代码,用于写入文件。

std::ofstream fout("a.dat", std::ios::binary);

int nNum = 20;

std::string str("Hello, world");

fout.write((char*)&nNum, sizeof(int));

fout.write(str.c_str(), sizeof(char) * (str.size()));

fout.close();

而写文本文件则比较简单,如下:

std::ofstream fout("b.dat");

int nNum = 20;

std::string str("Hello, world");

fout << nNum <<","<< str << std::endl;

fout.close();

读二进制文件

读取二进制文件可以使用ifstream 类来进行,文件的打开模式一定要是 binary,如果传入的不是 binary, 文件将以ASCII方式打开。

下面是示例代码:

std::ifstream fin("a.dat", std::ios::binary);

int nNum;

char szBuf[256] = {0};

fin.read((char*)&nNum, sizeof(int));

fin.read(szBuf, sizeof(char) * 256);

std::cout <<"int = "<< nNum << std::endl;

std::cout <<"str = "<< szBuf << std::endl;

fin.close();

7. fscanf、fprintf读写二进制文件

1. myData和yourData两个文件的大小;
逗链2. 用记事本方式(或文本方式)打开myData和yourData, 看是否出现乱码.
山绝孙3. 用UltraEdit打开myData和yourData,对比一下结果.
写读二进制文件,参宏桐考如下:
#include<iostream>
#define N 10000
using namespace std;

void write()
{
int i, a[N];
for(i = 0; i < N; i++)
a[i] = i;

FILE *fp;
fp = fopen("yourData", "w");
for(i = 0; i < N; i++)
fprintf(fp, "%d ", a[i]);
fclose(fp);
}

void read()
{
FILE *fp;
fp = fopen("yourData", "r");
int i, a[N];
for(i = 0; i < N; i++)
fscanf(fp, "%d", &a[i]);
fclose(fp);

for(i = 0; i < N; i++)
cout << a[i] << endl;
}

int main()
{
write();
read();

return 0;
}

8. 如果二进制文件a.dat已经存在,现在要求写入全新数据,应以什么方式打开

如果二进制文件a.dat已经存在,现在要求写入全新数据,应以“wb”方式打开,具体代码如下:

FILE *fp;

fp=fopen(“a.dat”,“wb”);

就会将原来的文件内容全删除,写全新的数据。

在windows上,用记事本就可以打开文本文件了,但要打开二进制文件需要对应的二进制文件解码器,因此,文本文件是更为大家所熟知的文件形式,而二进制文件的优点漏扮在于它的输入输出都省去了转换的过程,而且更省空间。

(8)tffs二进制文件读写扩展阅读:

二进制文件读写操作方法:

1、二进制文件操作

rb - 读的时候获取到的是二进制数据(bytes)

wb - 写的时候写入的内容要求类型是二进制文件

普通的文本文件可以通过二进制的形返誉灶式去打开,影响只是获取到的内容,和写进去的内容的数据类型;二进制文件只能以二进制的形式打开 (例如: 图片、视频、音频等)

2、二进制数据

一般二进制数据都是通过网络请求获取到,或者通过读取本地的二进制文件来虚迟取到

(1)将字符串转换二进制

bytes(字符串, 编码方式)

字符串.encode(编码方式)

(2)将二进制转换成字符串

str(二进制数据, 编码方式)

二进制数据.decode(编码方式)

9. c语言如何读写二进制

内容的写入分两种,a.字符 b.字节
前者可以写一些字符串,后者主要用来内写入 视频,音频那些数据容.
就像你用记事本打开 *.mp3文件一样会出现乱码。
而如果你想写入字符串也出现乱码,则应该修改写入时的字符编码格式。
有Unicode,utf-8,ansi,gbk等等。而windows有自己默认的读取格式,所以当你写入的格式与默认格式不相同时就会出现用记事本打开时出现乱码了。
另一种情况是在写入字符串之前对字符串进行加密。
如果需要具体的例子,可以M我QQ

10. C对二进制文件操作

C对二进制文件读写操作,可以用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:文件型指针。
注意:1 完成次写操(fwrite())作后必须关闭流(fclose());
2 完成一次读操作(fread())后,如果没有关闭流(fclose()),则指针(FILE * fp)自动向后移动前一次读写的长度,不关闭流继续下一次读操作则接着上次的输出继续输出;
3 fprintf() : 按格式输入到流,其原型是int fprintf(FILE *stream, const char *format[, argument, ...]);其用法和printf()相同,不过不是写到控制台,而是写到流罢了。
注意的是返回值为此次操作写入到文件的字节数。如int c = fprintf(fp, "%s %s %d %f", str1,str2, a, b) ;str1:10字节;str2: 10字节;a:2字节;b:8字节,c为33,因为写入时不同的数据间自动加入一个空格。

阅读全文

与tffs二进制文件读写相关的资料

热点内容
炫酷字体APP下载的文件在哪里 浏览:668
廊坊哪里有少儿编程机构 浏览:312
cad新文件能找回来吗 浏览:951
导出手机qq文件到u盘 浏览:456
电脑如何打开ppt文件怎么打开方式 浏览:782
魅族锁定区文件夹 浏览:357
刻字cnc怎么编程 浏览:182
学校的网络拓扑结构图 浏览:784
收集100个pdf文件里关键词 浏览:594
苹果关闭4g网络设置 浏览:289
如何监测数据库 浏览:967
拷贝过来的pdf文件 浏览:751
抖音小店的访客数据怎么看 浏览:670
怎么把c语言编程的字符向下移动 浏览:786
sql删除文件组代码 浏览:978
安卓post请求多重json 浏览:776
微信消除数据怎么恢复 浏览:918
小米刷机显示系统找不到指定文件 浏览:528
苹果手机小风扇图app叫什么 浏览:292
繁体中文输入工具 浏览:916

友情链接