C++读取TXT文件的问题。。。

hao527 2010-05-19 12:49:40
假如需要读取的TXT文件里的内容为
123.txt*3*2010414212748*存档**345.txt*6*2010414212918*存档**q.txt*3*2010421162948*存档**

内容的意思就是:123.txt就是文件名,3是文件大小,2010414212748是修改时间,存档是属性。之后**又是一个新的文件名,大小,修改时间,属性。。以此类推。。。。其实这个TXT文件就是存储一些文件的信息。。。

但是我现在想输出的效果是:文件名:123.txt 大小:3 修改时间:2010414212748 属性:存档
文件名:345.txt 大小:6 修改时间:2010414212918 属性:存档

...



想了半天不知道怎么在输出时加上文件名,大小,修改时间,属性这些字····希望高手指点指点。。
...全文
211 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ylke2007 2010-05-19
  • 打赏
  • 举报
回复
不就是拼字符串吗?
向立天 2010-05-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 s373785346 的回复:]
自己能存进去,读出来也简单的,建议lz把这些信息搞成结构体 比如:
typedef struct fileInformation
{
CString fileName;
CString fileSize;
CString modifyTime;
}
这样的话,直接按照结构体来读,就可以了
上面我只是举个例子,LZ有更多信息的话,只需要增加属性就可以了
[/Quote]
不能这么写结构体
这样也是不定长的
没有简化操作
要用定长的方式

struct FileHead
{
char m_szFileName[256];
int m_nSize;
};

使用时
FileHead headFile;
strcpy(headFile.m_szFileName, "test.txt");
headFile.m_nSize = 1024;

然后读就是
read(&headFile, sizeof(FileHead));

写就是
write(&headFile, sizeof(FileHead));
赵4老师 2010-05-19
  • 打赏
  • 举报
回复
记不得哪位C++大牛在哪本学习C++的书的前言里面说过
“用C语言1000行源码能完成的工作千万不要用C++重写!”
赵4老师 2010-05-19
  • 打赏
  • 举报
回复
strtok
sprintf
printf
hao527 2010-05-19
  • 打赏
  • 举报
回复
可以给个例子不?就是怎么将数据存入结构体当中呢??
dinjay 2010-05-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 s373785346 的回复:]
自己能存进去,读出来也简单的,建议lz把这些信息搞成结构体 比如:
typedef struct fileInformation
{
CString fileName;
CString fileSize;
CString modifyTime;
}
这样的话,直接按照结构体来读,就可以了
上面我只是举个例子,LZ有更多信息的话,只需要增加属性就可以了
[/Quote]
对,写入结构体,读的时候也按照结构体读出就行了。
struct A a;
fwrite(a,...);
fread(a,...)
liutengfeigo 2010-05-19
  • 打赏
  • 举报
回复
大牛们太多了。学习学习~
gary_cai 2010-05-19
  • 打赏
  • 举报
回复
有指针去查找字符吧就是截取字符串
Henry8484 2010-05-19
  • 打赏
  • 举报
回复
自己能存进去,读出来也简单的,建议lz把这些信息搞成结构体 比如:
typedef struct fileInformation
{
CString fileName;
CString fileSize;
CString modifyTime;
}
这样的话,直接按照结构体来读,就可以了
上面我只是举个例子,LZ有更多信息的话,只需要增加属性就可以了
erickies 2010-05-19
  • 打赏
  • 举报
回复

#include<fstream>
#include<iostream>
#include<string>
using namespace std;

int main()
{
ifstream fin("AreaCode.txt");//输入的文件
ofstream fout("AreaCodeplus.txt");//输出的文件
string a;
while(getline(fin,a))//从文件中提取一行
{

int position1=a.find('|',0);//找到第一个分隔符的位置
int position2=position1;
for(int j=0;j<4;++j)//找到第五个分隔符的位置
{
position2=a.find('|',position2+1);
}
//cout<<position1<<" "<<position2<<endl;
//输出需要的部分:第一个分隔符之前,和第五个分隔符之后
fout<<a.substr(0,position1)<<a.substr(position2)<<endl;
}
cout<<"Done\n";
fin.close();
fout.close();
return 0;
}


给你个例子吧,这个例子是用“|”当分隔符,提取第一个|之前的数据和第五个|之后的数据。
你需要的功能,在这个程序上改一改就能实现
erickies 2010-05-19
  • 打赏
  • 举报
回复
用string型读入一行,接着用find找*号,得到迭代器的值,然后用迭代器把string分隔输出就行。
只用过这么一种笨办法,更好的就要看编程大牛们的了
hao527 2010-05-19
  • 打赏
  • 举报
回复
那就是怎样??

64,648

社区成员

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

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