C++中随机存取文件的处理方法是什么

技术C++中随机存取文件的处理方法是什么这篇文章主要讲解了“C++中随机存取文件的处理方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++中随机存取文件的处理方

本文主要讲解“C语言中随机访问文件的处理方法是什么”,简单明了,易学易懂。现在请大家跟随边肖的思路,一起研究学习“C语言中随机存取文件的处理方法是什么”!

的基本文件操作有

FOPEN3354打开文件,指定文件的打开方式(读/写)和类型(二进制/文本)。

关闭打开的文件。

fread——读取文件

fwrite——写入文件

fseek/fsetpos——将文件指示器转移到文件中的某个位置。

ftell/fgetpos——可以告诉你文件指示器在哪里。

文件有两种基本类型:文本和二进制。在这两者中,二进制类型通常更容易解决。由于处理文本中的随机访问并不常见,因此我们将在本文中重点讨论二进制文件的处理。上面列出的前四个操作可以用于文本文件和随机访问文件。后两项仅用于随机访问。

随机存取意味着我们可以在文件的任何部分之间切换,并从中读写数据,而无需读取整个文件。

二进制文件

二进制文件是任何长度的文件,它保存从0到0xff(0到255)的字节值。这些字节在二进制文件中没有任何意义。与此不同,在文本文件中,值13表示回车,10表示换行,26表示文件结束,读取文本文件的软件应该能够解决这些问题。

在当前的术语中,我们将二进制文件称为包含字节的字符流,大多数语言倾向于将它们理解为字符流而不是文件。重要的部分是数据流本身,而不是它的来源。在C语言中,您可以根据文件或数据流来考虑数据。或者,你可以把它想象成一个长数组。通过随机访问,您可以读写数组的任何部分。

例1:

//ex1.c :定义控制台应用程序的入口点。

//

#包含stdio.h

#包含字符串. h

#包含windows.h

int FileSuccess(FILE *句柄,const char *原因,const char *路径){ 0

OutputDebugString(原因);

OutputDebugString(路径);

outputdebugsting(' Result : ');

if(句柄==0)

{

OutputDebugString('失败');

返回0;

}

其他

{

outputdebugsting(' Suceded ');

返回1;

}

}

int main(int argc,char * argv[])

{

const char * filename=' test.txt

const char * mytext=“从前有三只熊。”;

int bytes written=0;

FILE * ft=fopen(文件名,‘WB’);

if(文件成功(英尺,“打开文件:”,文件名)){ 0

fwrite(mytext,sizeof(char),strlen(mytext),ft);

fclose(英尺);

}

printf(' my text的=% i ',strlen(my text));

返回0;

}

这段代码显示了一个简单的二进制文件,其中写入了文本字符(char*)。你通常使用文本文件,但我想证明你可以将文本写入二进制文件。

//ex1.c示例1的作用

本示例打开一个要写入的二进制文件。从fopen()调用返回FILE*变量。如果此操作失败,它将返回到0。

Fopen()命令试图打开指定的文件,在本例中,该文件是位于同一文件夹中的test.txt。请记住,如果文件包含路径,所有退格必须重叠。“c:\folder\test.txt”错误,必须使用“c:\\folder\\test.txt”。

由于文件样式是wb,我们准备写入二进制文件。如果文件不存在,系统将创建一个文件。如果存在,内容将被删除。如果对fopen的调用失败,可能是因为文件已打开,或者其名称包含无效字符或无效路径。

么fopen会返回0值。

虽然你可以只检查ft是否为0(值为0则成功),但是笔者还是添加了一个FileSuccess()函数来确保这一操作。在窗口中,它会显示调用是否成功以及文件名称。如果你失败了则可能需要修复。注意在Windows中一般没有多少输出文本可供系统调试器使用,

fwrite(mytext,sizeof(char),strlen(mytext), ft) ; fwrite()调用输出了指定文本。第二,三个参数分别是字符的大小和字符串的长度。它们两个都是被size_t定义了。注意有了二进制文件后,即便你正在向文件中写入(char*)字符串,它也没有任何附加换行字符。如果你想要这些字符,你必须明确将这些字符包含到字符串中。

读写文件

打开一个文件的时候,必须指定打开的方式。这意味着如果你打算要为文件附加东西,那么是否要创建新文件并对其进行覆盖?它是文本文件还是二进制文件呢?是要读取文件还是要写文件呢?这样要通过使用一个或更多的文件模式分类符来完成,文件模式分类符是一些单独的字母“r”,“b”,“w”,“a”和+。“r”意思是打开文件以便读取。如果文件不存在或找不到文件这一操作会失败。“w”意思是待写方式或空文件方式打开文件。如果文件存在,则文件内容会被损坏。“a”表示打开文件,并准备从文件末端写入而不需要在写入新数据前删除EOF标记;如果不存在该文件则首先会创建一个文件。向文件模型添加+会创建下列三种新模型:

“r+”打开文件等待读取或写入。“w+”以空文件方式打开文件等待读取或写入。如果文件存在,则文件内容会被损毁。

“a+”打开文件等待读取或添加,添加的操作包括新数据写入前EOF标记的移除,以及写入完成后EOF标记的保存,如果文件不存在则先要创建文件。

下面的列表显示了字码组合包括文本的和二进制文件的。通常你可以选择从文本文件中读取或写入文件,但是不要两者同时使用。

就二进制文件而言,你可以选择对相同文件进行读取和写入的操作。列表告诉了我们可以用字码进行哪些操作。

       Mode Type of file Read Write Create Truncate 
r text Read

就笔者的经验来看,除非你刚刚创建完文件或读取完文件,否则你通过使用“w+b”只能侥幸成功。

还有一些情况允许其他字母存在。例如微软运行“t”代表文本模式,“c”用于认可,“n”用于非认可,“S”为顺序存取优化缓冲,“R”代表随机存取,“T”代表临时性而“D”用于 删除/临时性保存。

使用二进制文件的主要原因是可以获得灵活性;你可以读取或写入文件的任意部分。文本文件只能让你按照顺序读取或写入。现在随着SQLite或MySQL数据库的普及,在二进制文件中使用随机存取的需要减少了。从某种意义上说,随机存取文件记录有点老土了,但是仍然还是有用的。

笔者在数据库普及之前就使用过基于随机存取文件的多种数据处理方案。例如,在小文件中,笔者使用的是 索引/数据 文件模式。该模式包括两个文件。一个是数据文件,它保存了一些长短不一的记录。另一种文件是索引文件,这样的文件拥有同样的记录作为数据文件。但是在索引文件中每个记录的长度相同而且都由两个适合结构的部分组成。

struct {??fpos_t pos;??int size; } indexrec;

类型fpos_t是由fsetpos()和fgetpos()定义和使用的执行。这些是fseek和ftell更新的版本且更有助于创建书签。如果你正在计算文件闻之且需要设定文件那么你应该使用fseek(),另外ftell()也可以给你int的当前位置。

在实际操作中,fpos_t可能只是一个int但是你应该使用fpos_t类型。它保存了当前文件指示器的副本。这是随机存取文件的属性,它表明了下一次读取或写入的位置。它的粒度为一,因此你可以将其放在文件的任意位置。

感谢各位的阅读,以上就是“C++中随机存取文件的处理方法是什么”的内容了,经过本文的学习后,相信大家对C++中随机存取文件的处理方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/125336.html

(0)

相关推荐

  • 微信附近的人看不到我怎么办,微信附近的人看不见我怎么解决

    技术微信附近的人看不到我怎么办,微信附近的人看不见我怎么解决微信附近的人看不到我的基本解决办法是:查看一下是否开启了微信【附近的人】页面,点击查看一下【附近打招呼的人】;或者是进入您的手机设置中查看一下是否关闭了微信获取

    生活 2021年10月20日
  • 抖音播放量突然被限流降权是什么原因

    技术抖音播放量突然被限流降权是什么原因 抖音播放量突然被限流降权是什么原因抖音播放量突然被限流降权是什么原因本来发布的视频播放量都挺稳定的,但突然有一天发布的视频播放量急降,这个情况相信不少用户也遇到过

    礼包 2021年11月27日
  • 支付宝申请商家二维码,怎么开通支付宝商家收钱码

    技术支付宝申请商家二维码,怎么开通支付宝商家收钱码需要开通支付宝商家收钱码支付宝申请商家二维码,需要自己是支付宝商家,方法如下: 1、首先在手机上找到并打开支付宝APP客户端。 2、然后在支付宝页面中选择红色箭头所指处的

    生活 2021年10月24日
  • Java语言中的线程安全问题是怎样的

    技术Java语言中的线程安全问题是怎样的Java语言中的线程安全问题是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java语言是一种支持多线程的语言

    攻略 2021年10月23日
  • 寻寻觅觅的意思,如何解读李清照的《声声慢》

    技术寻寻觅觅的意思,如何解读李清照的《声声慢》李清照是我国文学史上杰出的女作家,宋词婉约派的主要代表人物,其作品对后世有着较大的影响寻寻觅觅的意思。《声声慢》可能是易安后期的作品。李清照所处的时代,是烽火连天,山河破碎的

    生活 2021年10月22日
  • 有志不在年高无志空长百岁,无志空活百岁上一句是什么

    技术有志不在年高无志空长百岁,无志空活百岁上一句是什么有志不在年高有志不在年高无志空长百岁,无志空活百岁出自《甘罗十二为使臣》 【解释】 意思是指只要有远大志向,就算年纪小也没事,一个没有远大志向的人,即便活到很大的岁数

    生活 2021年10月27日