1

我有三个字符串文件将存储到动态数组中,但我只是尝试三个文件中的一个来测试这是否成功,所以我将以相同的方式处理我拥有的三个文件。我的目标是将我从文件中获得的字符串显示到我的代码的 ListView 中。

void __fastcall TFrmNewPeta::showDefaultRute() {
    std::string lineDataAwal;
    std::ifstream ifs_Awal;
    int tempIndexAwal = 0;
    ifs_Awal.open("DefaultDataAwal");

        /*counting the line*/
        while(std::getline(ifs_Awal,lineDataAwal)){++tempIndexAwal;}

        /*use dynamic array to stored string*/    
        std::string *s = new std::string[tempIndexAwal];

        for(int dx=0;dx<tempIndexAwal;dx++)
        {
            while(std::getline(ifs_Awal,lineDataAwal))
          s[dx] = lineDataAwal[dx++];
        }

        for(int dex =0;dex<tempIndexAwal;++dex)
        {
           ItemDefult = ListView1->Items->Add();
           ItemDefult->Caption = String(IntToStr(dex + 1));
           ItemDefult->SubItems->Add(s[dex].c_str());
        }
        ifs_Awal.close();
    delete []s;
    s = NULL;
}

编译期间没有错误,但结果 ListView 只显示带有此代码的数字,ItemDefult->Caption = String(IntToStr(dex + 1)); 任何人都可以向我展示我的最佳方法。

4

2 回答 2

3

您正在阅读文件,将其保持打开状态,并希望再次阅读。这不起作用,因为文件中的光标位于文件末尾(所以你的第二个 while 循环什么都不做)。

更好的方法是:

std::vector<std::string> lines;
std::string line;
std::ifstream fin("Youfilename");

while (std::getline(fin, line))
{
    lines.push_back(line);
}
fin.close();
// add data to your list view
于 2013-10-05T23:22:27.623 回答
1

如果您将 std::vector 用于动态数组并且不要忘记首先包含文件头,它会更容易#include<vector>

void __fastcall TFrmNewPeta::showDefaultRute() {
    std::string lineDataAwal;
    std::ifstream ifs_Awal;
    std::vector<std::string> vec;
    ifs_Awal.open("DefaultDataAwal");

   /*get the string of lineDataAwal */
    while(std::getline(ifs_Awal,lineDataAwal))
    { vec.push_back(lineDataAwal);}

    for(int dex =0;dex<vec.size();++dex) 
    {
      ItemDefult = ListView1->Items->Add();
      ItemDefult->Caption = String(IntToStr(dex + 1));
      ItemDefult->SubItems->Add(vec.at(dex).c_str()); 
    }
   ifs_Awal.close();
}

希望这可以帮助

于 2013-10-06T14:32:53.100 回答