读取文件夹C++中的文件时出现问题
having issues reading in files within a folder C++
我目前正在从事一个项目,该项目需要评估神秘文本文件,并使用提供给我的签名交叉引用它们。我面临的一个问题是,我们已经过度读取了项目文件夹中文件夹中的文件。(我正在使用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,如果这对任何人都很重要......
示例作为读取双精度。
File *file;
file = std::fopen(filename.c_str(), "r+b");
std::fread(&/*variableName*/, sizeof(double), 1, file);
这是你要找的吗?
我假设您的目录结构如下:
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
}
@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(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;
}
}
希望这将帮助任何需要与我相同的帮助的人。(并没有真正帮助数据.txt包括一个拼写错误的路径,花了一段时间才弄清楚)
相关文章:
- 使用mongocxx驱动程序时包含头文件问题
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 编译要在英特尔Hyperscan中使用的.cc文件时出现问题
- 使用 seekg() 读取C++中的文件时出现问题
- sqlite3 和生成文件中的链接出现问题
- C++头文件和类实现出现问题
- 用户输入字符串的文件附加问题..C++
- node-gyp 的先有鸡还是先有蛋的问题:指向依赖项中的头文件
- 读取文件并将其存储在unordered_map中时出现问题
- 编译 llvm 插件时出现问题:llvm/Config/llvm-config.h:没有这样的文件或目录
- 我在使用C++文件时遇到了一些问题
- 在Linux上使用Clang / OLLVM交叉编译helloworld Windows可执行文件时的问题
- 将文件复制到自定义位置,存在字符串转换问题
- DirectX12 的问题:"d3dApp.h":没有这样的文件或目录
- (ODR 使用问题)在不同文件中priority_queue名称相同的结构
- C++模板编程设计问题 - 根据输入文件返回不同的类型
- 读取制表符分隔的文件时出现问题 C++
- 当我在 CLion 中读取数组中的 txt 文件时C++编码问题
- 使用 RapidXML 解析大型 XML(大小大于 65 KB)文件时出现问题
- C++:读取.BMP文件时出现问题;文件结束时间早于预期