如何在c++中循环读取多个文件(连着的数字文件名)
我要读取多个文件,文件名是数字+“.bmp”扩展名,请问如何用循环实现连续读取?我试图用int转string的方法,然后和扩展名相加合成文件名,最后得出的是string类...
我要读取多个文件,文件名是数字+“.bmp”扩展名,请问如何用循环实现连续读取?我试图用int转string的方法,然后和扩展名相加合成文件名,最后得出的是string类型的总文件名,但是后面的程序要求文件名是char *name类型,string类型的没法转成那种。
展开
6个回答
展开全部
这里假设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;
}
因此,唯一的办法是将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;
}
展开全部
string s="sfsff";
const char* name; //string的c_str函数返回的是const
name=s.c_str();
const char* name; //string的c_str函数返回的是const
name=s.c_str();
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
fopen( s.c_str( ), "r+" );
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1楼的方法确实可以得到name不过这样不安全,最好自己开辟内存,不要直接指向
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对头,不过const char* 在很大程度上限制了使用范围。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询