class FilesHandling{
private: fstream f;
char *filename;
public: char *dir;
int dir_no;
void readFile(char *c){
ifstream f(c);
if (f.is_open()){
int n; f >> n;
dir_no = n;
for (int i = 0; i < n; i++)
{
dir = new char[];
f >> dir[i];}
f.close();
}
else cout << "Can't open file" << endl;
}
你好。我希望你现在能够更容易地理解代码。我是c ++的新手,我需要使用classes将数据从文件复制到数组。这是我必须做的项目的一小部分。问题是,当我从main()调用方法时,它没有做任何事情;我没有得到任何错误,但我看不到任何数据;
FilesHandling f("dir_mon.txt");
cout << f.getFN() << endl;
f.readFile("dir_mon.txt");
for (int i = 0; i < f.dir_no; i++)
cout << f.dir[i];
该班有其他成员,但我没有在这里复制;有什么建议吗? getFN()方法正在运行。我看不到从txt文件中复制的数据
我搜索了另一种读取文件的方法,并按照你的建议使用了std :: string,但仍然没有结果。 这就是新方法的样子:
void getData(char *c){
ifstream f(c);
if (f.is_open()){while(!f.eof())
std::getline(f, line);
for (int i = 0; i <= line.size(); i++)
dir[i] = line;
}}
f.close();
}
enter code here
答案 0 :(得分:0)
您的代码存在一些问题。
1)错误使用new[]
。
2)不检查文件中的行是否实际匹配(或超过)dir_no
值中指定的行。
3)不必要的成员变量,例如fstream f
。
这是一个工作示例。该示例使用以下内容:
1)std::vector<std::string> dir
代替char* dir
,而std::string
代替char*
2)使用getline
从文件中检索文本行。
3)注意循环将在循环命中dir_no
项时退出,或者如果文件用完行,则以先发生者为准。
4)请查看我们如何使用std::vector
扩展行数组。请注意,new[]
没有使用push_back
来执行此操作,而是调用std::vector
的{{1}}成员函数。
5)要输出结果,使用算法函数std::copy
。你不必了解它现在做了什么,只是让你知道它完成了什么。
#include <string>
#include <fstream>
#include <vector>
#include <iostream>
#include <iterator>
#include <algorithm>
class FilesHandling
{
int dir_no;
std::vector<std::string> dir;
public:
void readFile(const std::string& fName)
{
std::ifstream f(fName.c_str());
if (f)
{
f >> dir_no;
f.ignore();
std::string line;
for (int i = 0; i < dir_no && getline(f, line); ++i)
dir.push_back(line);
// output the results for testing
std::copy(dir.begin(), dir.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
}
else
std::cout << "Can't open file" << std::endl;
}
};
int main()
{
FilesHandling fh;
fh.readFile("abc123.txt");
}
当你运行它时,你应该看到输出到控制台的文本行。