возникли проблемы с чтением файлов в папке переполнения стека

В настоящее время я работаю над проектом, который требует оценки загадочных текстовых файлов и перекрестной ссылки на них с предоставленными мне подписями.
Одна проблема, с которой я сталкиваюсь, заключается в том, что мы перешли к чтению файлов из папки внутри папки проектов. (Я использую Visual Studios 2010)
Мне предоставляется простой файл «data.txt», который содержит целое число, представляющее количество имен файлов подписей; за ним следует много подписей, затем еще одно целое число, представляющее количество загадочных текстов; сопровождается этим много загадочных текстов.
у меня вопрос, как можно прочитать в файле с пути, указанного им в другом текстовом документе?
Файл data.txt выглядит следующим образом:

13
signatures/agatha.christi.stats
signatures/alexandre.dumas.stats
signatures/brothers.grim.stats
signatures/charles.dickens.stats
signatures/douglas.adams.stats
signatures/emily.bronte.stats
signatures/fyodor.dostoevsky.stats
signatures/james.joyce.stats
signatures/jane.austen.stats
signatures/lewis.caroll.stats
signatures/mark.twain.stats
signatures/sir.arthur.conan.doyle.stats
signatures/william.shakespeare.stats
5
documents/mystery1.txt
documents/mystery2.txt
documents/mystery3.txt
documents/mystery4.txt
documents/mystery5.txt

один из файлов подписи выглядит следующим образом (не спрашивайте, почему мой профессор решил использовать .stats, потому что я понятия не имею):

agatha christie

4.40212537354

0.103719383127

0.0534892315963
1
0.0836888743

1.90662947161

Я не могу изменить файлы и не могу изменить область, в которой они сохранены.
Я легко могу прочитать в файле «data.txt», но не могу найти файлы подписи вообще.
любая помощь будет оценена.
После прочтения подписей я планирую сохранить их в виде структур в массиве, чтобы впоследствии я мог ссылаться на них в проекте, чтобы сравнить их с подписями загадочных текстов.
эта программа использует пространство имен std, если это важно для всех …

0

Решение

Пример как чтение удваивается.

File *file;
file = std::fopen(filename.c_str(), "r+b");

std::fread(&/*variableName*/, sizeof(double), 1, file);

Это то, что вы ищете?

0

Другие решения

Я предполагаю, что ваша структура каталогов выглядит следующим образом:

the_program
data.txt
signatures/...
documents/...

Тогда это должно быть просто читать файлы:

std::ifstream in("data.txt");
std::vector<std::string> files;
int num_files;
in >> num_files;
for (unsigned i = 0; i < num_files; ++i) {
std::string file;
in >> file;
files.push_back(file);
}

// read mystery filenames

std::vector<std::string>::iterator it;
for (it = files.begin(); it != files.end(); ++it) {
std::ifstream sig(it->c_str());

// sig is your signature file. Read it here
}
0

@ ptic12
Ваш ответ очень помог, мне удалось отредактировать / манипулировать им, чтобы получить из него то, что мне нужно.
я создал класс для подписей, чтобы сделать его немного проще.
этот код написан довольно просто, и он длиннее, чем нужно, но он работает, позже в проекте я планирую немного «похудеть»

Есть несколько вещей, которые не хватает этого, конечно, но это был бы длинный пост, если бы я включил их

vector<Signature> MakeSignatures(string DataFile)
{
string SigFile="", MystFile="";
int NumSig=0, NumMystery=0;
ifstream infile(DataFile);// opens data.txt
infile >> NumSig;
vector<Signature> SigStorage;//creates a vector in which to store signature objects
for(int i=0; i <NumSig; i++)
{
infile >> SigFile;
Signature Sig(SigFile);
SigStorage.push_back(SigFile);
}
infile >> NumMystery;
for(int i=0; i < NumMystery; i++)
{
infile >> MystFile;
//not quite done here yet
//large part of project will be called here
}

return SigStorage;
}

и конструктор в .cpp класса Signature

Signature::Signature(string SigFile)
{
ifstream in(SigFile);
while(!in.eof())
{
getline(in, AuthName); //gets author name
in >> AverageWord; //get next 5 floats
in >> TypeToken;
in >> HapaxLego;
in >> AverageNumber;
in >> SentenceCom;
}

}

надеюсь, это поможет всем, кому нужна такая же помощь, как и я.
(на самом деле не помогло, что data.txt содержал путь с ошибкой, потребовалось время, чтобы выяснить это)

0
По вопросам рекламы [email protected]