从文件读取到数组C++

read from file to array C++

本文关键字:数组 C++ 读取 文件      更新时间:2023-10-16

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

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;
}

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

在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 * arr = &myVec[0];

然后您可以使用arr作为您常用的无符号字符数组。只需确保在向向量添加更多元素后不会挂在这个指针上。不能保证它仍然是指向向量内部数组开头的有效指针(因为向量会重新分配其内部数组)。

前一行代码并没有创建一个全新的数组。如果你想要一个真正的矢量内部内容的副本,你可以使用这样的东西:

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

只需确保包含标准<算法>头球