如何在c++中循环读取多个文件(连着的数字文件名)

我要读取多个文件,文件名是数字+“.bmp”扩展名,请问如何用循环实现连续读取?我试图用int转string的方法,然后和扩展名相加合成文件名,最后得出的是string类... 我要读取多个文件,文件名是数字+“.bmp”扩展名,请问如何用循环实现连续读取?我试图用int转string的方法,然后和扩展名相加合成文件名,最后得出的是string类型的总文件名,但是后面的程序要求文件名是char *name类型,string类型的没法转成那种。 展开
 我来答
风飞尘落
推荐于2018-03-23 · 心理咨询师,中国科学院心理研究所
风飞尘落
采纳数:26463 获赞数:163424

向TA提问 私信TA
展开全部
这里假设string类型可能包含任意字符。否则,只需用不可能出现的字符分隔开即可。
因此,唯一的办法是将string的长度也写入到文件当中。下面是示例:
#include <string>
#include <fstream>
#include <sstream>
#include <vector>
#include <iostream>

inline void WriteString(std::ostream& ostr, std::string const& str) {
// 写入字符串长度
ostr << str.size() << "\n";
// 写入字符串
ostr.write(str.data(), str.size());
}

inline std::string ReadString(std::istream& istr) {
// 获取字符串长度
std::string line;
std::getline(istr, line);
std::istringstream tmp(line);
std::size_t size;
tmp >> size;
// 读取字符串
std::vector<char> result(size);
istr.read(result.data(), size);
return std::string(result.begin(), result.end());
}

int main() {
std::string const filename = "t.txt", s1 = "string 1 \n Yeah!", s2 = "string 2 \\ Yep!";
{
std::ofstream ostr(filename);

WriteString(ostr, s1);
WriteString(ostr, s2);
}
{
std::ifstream istr(filename);
std::cout << (ReadString(istr) == s1 && ReadString(istr) == s2) << "\n";
}

return 0;
}
zhlonglt
推荐于2016-06-25 · TA获得超过130个赞
知道小有建树答主
回答量:109
采纳率:0%
帮助的人:0
展开全部
string s="sfsff";
const char* name; //string的c_str函数返回的是const
name=s.c_str();
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
写代码的卖鱼人
2009-11-27 · TA获得超过354个赞
知道小有建树答主
回答量:259
采纳率:100%
帮助的人:252万
展开全部
fopen( s.c_str( ), "r+" );
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhangdw2006
2009-11-27 · TA获得超过1614个赞
知道大有可为答主
回答量:2521
采纳率:0%
帮助的人:1864万
展开全部
1楼的方法确实可以得到name不过这样不安全,最好自己开辟内存,不要直接指向
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4fee1d0
2009-11-27 · TA获得超过340个赞
知道小有建树答主
回答量:411
采纳率:0%
帮助的人:276万
展开全部
对头,不过const char* 在很大程度上限制了使用范围。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式