Как скопировать файл в массив динамических строк - PullRequest
0 голосов
/ 23 февраля 2011

Я пытаюсь прочитать весь входной файл в строку.Прямо сейчас у меня есть:

bool DynString::readLine(std::istream& in)
{
    if(in.eof())
    {
        *this = DynString();    // Default string value.
        return(false);
    }

    char s[1001];
    in.getline(s, 1001);

    // Delete old string-value and create new pBuff string with copy of s
    delete [] pBuff;

    pBuff = new char[strlen(s) + 1];
    DynString pBuff(s);

    return(true);
}

bool DynString::readFile(const char filename[])
{
    std::ifstream in(filename);
    if(! in.is_open() )
    {
        *this = DynString();    // Default string value.
        return(false);
    }

    // Delete old string-value and
    // Read the file-contents into a new pBuff string

    delete [] pBuff;

    DynString tempString;
    return(true);
}

Где pBuff - это объект Dynamic String с именем DynString

Что я должен сделать, это создать временный объект DynString и сделать его временным,затем используйте метод readLine, чтобы назначить временную строку для строки текстового файла.как только это будет сделано, я бы удалил старый массив строк "pBuff", а затем скопировал бы temp в новый массив pBuff.

Для этого потребовалось бы использовать функцию concatonate, где я просто добавил бы элементы ввременный массив для существующего pBuff?

Извините, если это немного сбивает с толку, у него есть другие методы в заголовочном файле, но это слишком много для включения.

1 Ответ

0 голосов
/ 23 февраля 2011

Почему бы не сделать что-то попроще, например, следующее или вам нужно использовать класс DynString?

static std::string readFile(const std::string& sFile)
{
  // open file with appropriate flags
  std::ifstream in1(sFile.c_str(), std::ios_base::in | std::ios_base::binary);
  if (in1.is_open())
  {
    // get length of file:
    in1.seekg (0, std::ios::end);
    std::streamoff length = in1.tellg();
    in1.seekg (0, std::ios::beg);
    // Just in case
    assert(length < UINT32_MAX);
    unsigned uiSize = static_cast<unsigned>(length);
    char* szBuffer = new char[uiSize];
    // read data as a block:
    in1.read (szBuffer, length);
    in1.close();

    std::string sFileContent(szBuffer, uiSize);
    delete[] szBuffer;
    return sFileContent;
  }
  else
  {
     // handle error
  }
}
...