关于读写文件时的问题

jimchen2015 2015-07-01 06:31:04
请教一个问题,在MFC编程中,利用代码(1)生成了一个txt文件,直接用记事本双击打开,可以看到正常的数据,但当想利用代码(2)将该文件打开时,就发现无法读入数据,如果是利用记事本直接生成一个txt文件,并手动输入数据,则代码(2)可以正常读取数据并处理,不知道这是什么原因造成的,求解答?

代码(1):
 CFile file1;
file1.Open(L"test.txt",CFile::modeCreate|CFile::modeReadWrite);
CArchive ar(&file1,CArchive::store);
if(ar.IsStoring())
{
ar.WriteString(m_str);
}
ar.Close();
file1.Close();


代码(2):
ifstream fin;
fin.open(L"test.txt");
...全文
247 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-07-08
  • 打赏
  • 举报
回复
ifstream,regex,string,"abc" 和 wifstream,wregex,wstring,L"abc" 不是一回事!
jimchen2015 2015-07-08
  • 打赏
  • 举报
回复
引用 12 楼 zhao4zhong1 的回复:
ifstream,regex,string,"abc" 和 wifstream,wregex,wstring,L"abc" 不是一回事!
嗯,知道。就是因为不同所以如果直接将代码二中的ifstream改为wifstream才会使得getline函数报错,现在通过更改属性,使得利用代码(1)生成的文件由截图(1)变为了截图(2),所以在几乎不改写代码的条件下使得这个中间文件——test.txt能够成功生成并被顺利读取~
jimchen2015 2015-07-07
  • 打赏
  • 举报
回复
引用 10 楼 zhao4zhong1 的回复:
截图1对应ifstream 截图2对应wifstream
如果直接将代码(2)中的ifstream改为wifstream,那么正则表达式匹配提取中用到的getline函数将会编译报错,最后的解决办法就是在vs2010中的项目属性——配置属性——常规——字符集中将使用Unicode字符集改为使用多字节字符集,并把所有代码L"xx"前面的L去掉,这样就能正常使用了,谢谢你的指点啦!
赵4老师 2015-07-07
  • 打赏
  • 举报
回复
截图1对应ifstream 截图2对应wifstream
jimchen2015 2015-07-07
  • 打赏
  • 举报
回复
引用 8 楼 zhao4zhong1 的回复:
推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。

电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
已用WinHex文件查看两个test.txt文件,用代码(1)生成的文件如截图(1)所示,用电脑新建的test.txt文件并录入原始数据文件如截图(2)所示,截图(1)所示文件无法被代码(2)读取的原因似乎是每个字符后面多出了一个空格,不知道应该如何修改代码(1)将空格去除呢?

截图(1)所示文件无法被代码(2)读取:
截图(2)所示文件可以被代码(2)读取:
赵4老师 2015-07-06
  • 打赏
  • 举报
回复
推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
jimchen2015 2015-07-03
  • 打赏
  • 举报
回复
暖个贴~~~
jimchen2015 2015-07-02
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
wofstream 对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
尝试了一下用wofstream 来写入文件,因为之前没有用过,所以代码(4)只能输入一行,代码(5)一行都无法输入,为了说明pBuf和str的含义,特贴出利用CFileDialog类打开原始数据的代码(6),所以想请教一下用什么方法能够将代码(6)中已经得到的pBuf或者str中的数据写入一个txt文件,且该文件还必须可以被代码(2)正常读取。 代码(4):
		wofstream fout;
		fout.open("test.txt");
		fout<<str;
		fout.close();
代码(5):
		wofstream fout;
		fout.open("test.txt");
		fout<<(TCHAR*)pBuf;
		fout.close();
代码(6):
 CFileDialog fileDlg(TRUE);
	fileDlg.m_ofn.lpstrTitle=L"数据文件打开对话框";
	fileDlg.m_ofn.lpstrFilter=L"Dat Files(*.dat)\0*.dat\0All Files(*.*)\0*.*\0\0";
	if(IDOK==fileDlg.DoModal())
	{
		CFile file(fileDlg.GetFileName(),CFile::modeRead);
		char *pBuf;
		DWORD dwFileLen;
		dwFileLen=file.GetLength();
		pBuf=new char[dwFileLen+1];
		pBuf[dwFileLen]=0;
		file.Read(pBuf,dwFileLen);
		file.Close();
		CString str(pBuf);
		m_str=str;
      }
赵4老师 2015-07-02
  • 打赏
  • 举报
回复
wofstream 对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
jimchen2015 2015-07-01
  • 打赏
  • 举报
回复
引用 2 楼 hnwyllmm 的回复:
看看报错信息
没有报错信息,程序可以正常运行,只是因为无法正常读取txt中数据,所以最终处理后的输出为空~
jimchen2015 2015-07-01
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
wifstream
因为读取文件后还有一系列的操作,所以最好是修改生成txt文件的代码,之前也尝试利用代码(3)生成txt,但是写入的数据有误,本来是很多行的数据,例如: “%FSLAX25Y25*% %MOIN*% G70* G01* G75*” 可打开后只显示05905EA8,代码(3):
ofstream fout;
		fout.open("test.txt");
		fout<<str;
		fout.close();
羽飞 2015-07-01
  • 打赏
  • 举报
回复
看看报错信息
赵4老师 2015-07-01
  • 打赏
  • 举报
回复
wifstream
纯c读写ini配置文件 用c/c++读写ini配置文件有不少第三方的开源库,如iniparser、libini、rwini、UltraLightINIParser等,但都不理想,往往代码较大、功能较弱、 接口使用不方便。尤其在大小写处理、前后空格、各种注释、跨平台换行符支持、带引号字符串处理、无section操作、原格式保持等方面存在问题。 现将本人精心制作的ini读写程序源码奉献给大家,纯c编写,简洁好用。支持windows和linux。 主要特点: 1、支持;和#注释符号,支持行尾注释。 2、支持带引号'或"成对匹配的字符串,提取自动去引号。引号中可带其它引号或;#注释符。 3、支持无section或空section(名称为空)。 4、支持10、16、8进制数,0x开头为16进制数,0开头为8进制。 5、支持section、key或=号前后带空格。 6、支持\n、\r、\r\n或\n\r换行格式。 7、不区分section、key大小写,但写入以新串为准,并保持其大小写。 8、新增数据,若section存在则在该节最后一个有效数据后添加,否则在文件尾部添加。 9、支持指定key所在整行删除,即删除该键值,包括注释。 10、可自动跳过格式错误行,修改仍然保留。 11、修改保留原注释:包括整行注释、行尾注释(包括前面空格)。 12、修改保留原空行。以上三点主要是尽量保留原格式。 不足之处: 1、不支持单key多value(逗号分割),只能一次性提取后自行处理。 2、不支持同名重复section和key。(重复section可视为错误,重复key则可能造成分歧) 3、不能提取所有section或key名称。 使用只需两个文件inirw.h、inirw.c,另有测试程序和工程文件,支持windows和linux。
[14本经典Android开发教程] 8 Linux内核阅读心得体会 读核感悟 2 读核感悟 Linux内核启动 内核的生成 2 读核感悟 Linux内核启动 从hello world说起 3 读核感悟 Linux内核启动 BIOS 5 读核感悟 Linux内核启动 setup辅助程序 6 读核感悟 Linux内核启动 内核解压缩 8 读核感悟 Linux内核启动 开启页面映射 9 读核感悟 Linux内核启动 链接脚本 11 读核感悟 伪装现场 系统调用参数 13 读核感悟 伪装现场 fork 系统调用 15 读核感悟 伪装现场 内核线程: 17 读核感悟 伪装现场 信号通信 19 读核感悟 kbuild系统 内核模块的编译 22 读核感悟 kbuild系统 编译到内核和编译成模块的区别 24 读核感悟 kbuild系统 make bzImage的过程 26 读核感悟 kbuild系统 make menuconfig 31 读核感悟 文件系统 用C来实现面向对象 32 读核感悟 设计模式 用C来实现虚函数表和多态 32 读核感悟 设计模式 用C来实现继承和模板 33 读核感悟 设计模式 文件系统和设备的继承和接口 34 读核感悟 设计模式 文件系统与抽象工厂 36 读核感悟 阅读源代码技巧 查找定义 37 读核感悟 阅读源代码技巧 变量命名规则 42 读核感悟 内存管理 内核中的页表映射总结 43 读核感悟 健壮的代码 exception table 内核中的刑事档案 44 读核感悟 定器 巧妙的定器算法 45 读核感悟 内存管理 page fault处理流程 45 读核感悟 文件读写 select实现原理 47 读核感悟 文件读写 poll的实现原理 49 1 功能介绍: 49 2 关键的结构体: 49 3 poll的实现 49 4 性能分析: 50 读核感悟 文件读写 epoll的实现原理 50 1 功能介绍 50 2 关键结构体: 51 3 epoll create的实现 53 4 epoll ctl的实现 53 5 epoll wait的实现 54 6 性能分析 54 读核感悟 同步问题 同步问题概述 55 1 同步问题的产生背景 55 2 内核态与用户态的区别 55 读核感悟 同步问题 内核态自旋锁的实现 56 1自旋锁的总述 56 2非抢占式的自旋锁 56 3 锁的释放 57 4 与用户态的自旋锁的比较 57 5 总结 58 读核感悟 内存管理 free命令详解 58 读核感悟 文件读写 2 6 9内核中的AIO 59 1 AIO概述 59 2 内核态AIO的使用 61 读核感悟 文件读写 内核态AIO相关结构体 61 1 内核态AIO操作相关信息 61 2 AIO上下文: 63 3 AIO ring 63 4 异步I O事件的返回信息 64 读核感悟 文件读写 内核态AIO创建和提交操作 65 1 AIO上下文的创建 io setup 65 2 AIO请求的提交:io submit实现机制 66 读核感悟 文件操作 AIO操作的执行 66 1 在提交执行AIO 66 2 在工作队列中执行AIO 66 3 负责AIO执行的核心函数aio run iocb 67 4 AIO操作的完成 67 读核感悟 文件读写 内核态是否支持非direct I O方式的AIO 67 已上传7本: [14本经典Android开发教程] 1 Android开发从入门到精通 http: download csdn net detail cleopard 8355245 [14本经典Android开发教程] 2 Android开发手册 API函数详解 http: download csdn net detail cleopard 8374487 [14本经典Android开发教程] 3 Android SDK 中文开发文档 http: download csdn net detail cleopard 8380429 [14本经典Android开发教程] 4 Android应用程序开发36技 http: download csdn net detail cleopard 8380495 [14本经典Android开发教程] 5 linux Android基础知识总结 http: download csdn net detail cleopard 8380529 [14本经典Android开发教程] 6 Android驱动开发入门及手机案例开发分析教程 http: download csdn net detail cleopard 8388019 [14本经典Android开发教程] 7 Android编程入门教程 http: download csdn net detail cleopard 8388043 剩余8本稍后上传 @或直接从这里寻找@ http: download csdn net user cleopard album @更多@ http: cleopard download csdn net 福利 http: xuemeilaile com 17份软件测试文档 http: download csdn net album detail 1425 13份WPF经典开发教程 http: download csdn net album detail 1115 C#资料合辑二[C#桌面编程入门篇] http: download csdn net album detail 957 C#资料合辑一[C#入门篇] http: download csdn net album detail 669 [Csharp高级编程 第6版 ] 共8压缩卷 http: download csdn net album detail 667 10个[精品资源]Java学习资料合辑[一] http: download csdn net album detail 663 10个C#Socket编程代码示例 http: download csdn net album detail 631 6份GDI+程序设计资源整合[全零分] http: download csdn net album detail 625 2014年移动游戏行业数据分析 http: download csdn net detail cleopard 8340331 一文读懂2014年全球互联网广告新生态 http: download csdn net detail cleopard 8340303">[14本经典Android开发教程] 8 Linux内核阅读心得体会 读核感悟 2 读核感悟 Linux内核启动 内核的生成 2 读核 [更多]

65,209

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧