在c ++类中将文本从文件复制到数组

时间:2014-11-06 16:07:55

标签: c++

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

1 个答案:

答案 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");
    }

当你运行它时,你应该看到输出到控制台的文本行。