从文件读取到数组C ++

时间:2011-06-23 21:57:32

标签: c++ arrays

我想在RAD studio 2010中从文件读取到unsigned char数组,我有一个例子,但我需要读取文件的数组大小。对不起我的英文

void __fastcall TForm1::ChooseFileClick(TObject *Sender)
{
  TOpenDialog *od = new TOpenDialog(this);
  if (od->Execute()) {
    TFileStream *fs = new TFileStream(od->FileName,fmOpenRead);
    fs->Position = soFromBeginning;
    TMemo *m = new TMemo(this);
    m->Parent = this;
    m->Lines->LoadFromStream(fs);
    delete fs;
    fs = NULL;
  }
  delete od;
  od = NULL;
}

1 个答案:

答案 0 :(得分:0)

虽然我不确定你的确切意图,但我可以告诉你:不要使用原始阵列!

在C ++中,我们有vector类型。向量与数组非常相似,但您可以继续向其中添加元素。如果它变满了,它就会变得更大。 (实际上,向量只是数组的包装器。当它被填满时,它会创建一个更大的数组,将元素复制到新数组,然后丢弃原始数组)。

使用vector时,您的代码遵循以下风格:

#include <vector> // so we can actually use vectors

... // program code here

// here's a basic loop which fills a vectors with the numbers 1 to 99.
std::vector<unsigned char> myVec;
while( there_is_stuff_to_read )
{
    myVec.push_back(get_next_element());
}

当然,循环将涉及您使用的任何文件读取类。关键是push_back方法,它向向量添加元素。

如果你的代码的其他部分特别依赖于使用unsigned char数组,那么你可以填充向量,并根据需要使用这行代码:

unsigned char * arr = &myVec[0];

然后您可以使用arr作为通常的unsigned char数组。只需确保在向量中添加更多元素后不要挂起此指针。它不能保证保持一个指向向量内部数组开头的有效指针(因为向量重新分配了它的内部数组)。

上一行代码不会创建一个全新的数组。如果您想要矢量内部内容的真实副本,可以使用以下内容:

unsigned char * arr = new unsigned char[myVec.size()];
std::copy(myVec.begin(), myVec.end(), arr);

请确保包含标准&lt; algorithm&gt;报头中。