vc++中的c语言文件读写问题

vc++中的c语言文件读写问题,第1张

首先澄清几个问题

1。读取的文件本身是不存在什么格式的,而是读取者按照自己定义的格式来读取文件败友,所以文件本身不用区分什么txt,dat格式卖局

2。C++中的二进制格式和文本格式,事实没有什么本质区别,只是在以文本模式读取直接以字符串存储的文本文件,会存在很大便利,比如使用fscanf,fprintf等,C标准库会分析常见的字符,比如回车符,换行符等等,对于多行读取,可以不用手工搜索换行符

而以fread,fwrite读写则没有区别

基于此再回答楼主的问题:

1。rb指以二进制方式打开文件,并具有读权限,rw则指具有读写权限,具体根据需要定

2。你的代码我没有调试,但是从代码来看没发现整数变中枯让字符串的问题。

楼主指的可能是,写入文件之后,以记事本打开,没看到乱码,是吗?

如果写入的整数刚好对应的是可见字符的ASCII码,那么是不会出现乱码的,只有非可见字符,才会出现乱码

代码懒得氏稿洞写 给你个大概的思路

在MFC下读取和写入文本可以用CStudioFile类对象,比用C读简单,它的参考资料如下:

******************************************************************

CStdioFile类成员

数据成员:

m_pStream 包含了歼枯一个指向打开文件的指针

构造:

CStdioFile 从一个路径或文件指针构造一个CStdioFile对象

文本读/写 :

ReadString 读取一行文本

WriteString 写一行文本

一个CStdioFile对象代表一个用运行时函数fopen打开的C运行时流式文件。

流式文件是被缓冲的,而且可以以文本方式(缺省)或二进制方式打开。

文本方式提供对硬回车—换行符对的特殊处理。当你将一个换行符(0x0A)写入一个文本方式的CStdioFile对象时,字节对(0x0A,0x0D)被发送给该文件。当你读一个文件时,字节对(0x0A,0x0D)被翻译为一个字节(0x0A)。

当你读一个文件时,字节对(0x0A,0x0D)被翻译为一个字节(0x0A)。

CStdioFile不支持Duplicate,LockRange,和UnlockRange这几个CFile函数。如果在CStdioFile中调用敬仿了这几个函数,将会出现CNoSupported异常。

有关使用CStdioFile的更多信息,参见“Visual C++程序员指南”中的文章“MFC文件”,和“Microsoft Visual C++库参考”中的“Microsoft Visual C++ 6.0运行库参考”。

#include <afx.h>

**********************************************************************

文本文件的格式类似:1(回车) 2(回车)....

也就是一个数据一行

因为CStudioFile类读取文件时是一行一行读取的

将一行的内容读取到CString类对象中

然后再用CString函数的Format函数,将数字字符串格式化成整型数据并附给整型变量,这样就可以了

对数据处理后再写到源文件中时过程恰好相反(写数据时别忘了写回车符,"\r\n"或者"\n",具体哪个有用我忘了) 我就不多说了

VC声明

BOOL WriteFile(

HANDLE hFile, // 文件句柄

LPCVOID lpBuffer, // 数据缓存区指针

DWORD nNumberOfBytesToWrite, // 你要写的字节数

LPDWORD lpNumberOfBytesWritten, // 用于保存实际写入字节数的存储区域的指针

LPOVERLAPPED lpOverlapped // OVERLAPPED结构体指针

)

[编辑本段]功能说明:

从文件指针指向的位置开始将数据写入到一个文件中, 且支持同亏裂步和异步 *** 作,

如果文件打开方式没有指明FILE_FLAG_OVERLAPPED的话,当程序调用成功时,它将实际写入文件的字节数保存到lpNumberOfBytesWriten指明的地址空间中

如果文件要交互使用的话,当函数调用完毕时要记得调整文件指针

[编辑本段]参数说明

HANDLE hFile, 需要写入数据的文件指针,这个指针指向的文件必须是GENERIC_WRITE access 访问属性的文件

LPOVERLAPPED lpOverlapped OVERLAPPED结构体指针,如果文件是以FILE_FLAG_OVERLAPPED方式打开的话,那么这个指针就不能为NULL

[编辑本段]返回值

调亩渣用迅空悄成功,返回非0

调用不成功,返回为0

-----------------------------------------------‘

把你写入的实际字节数存入&dwWrites,也就是此函数完成后,实际写入的字节数是dwWrites.


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12218613.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存