gpt4 book ai didi

c++ - 的新手,试图访问目录中的数据

转载 作者:行者123 更新时间:2023-11-28 08:06:29 35 4
gpt4 key购买 nike

我以前从未使用过dirent.h。我正在使用 istringstream 来读取文本文件(单数),但需要尝试修改程序以读取目录中的多个文本文件。这是我尝试实现 dirent 的地方,但它不起作用。

也许我不能将它与 stringstream 一起使用?请指教。

为了可读性,我已经删除了我正在用单词做的蓬松的东西。在我添加 dirent.h 内容之前,这 对于一个文件来说工作得很好。

#include <cstdlib>
#include <iostream>
#include <string>
#include <sstream> // for istringstream
#include <fstream>
#include <stdio.h>
#include <dirent.h>

void main(){

string fileName;
istringstream strLine;
const string Punctuation = "-,.;:?\"'!@#$%^&*[]{}|";
const char *commonWords[] = {"AND","IS","OR","ARE","THE","A","AN",""};
string line, word;
int currentLine = 0;
int hashValue = 0;

//// these variables were added to new code //////

struct dirent *pent = NULL;
DIR *pdir = NULL; // pointer to the directory
pdir = opendir("documents");

//////////////////////////////////////////////////


while(pent = readdir(pdir)){

// read in values line by line, then word by word
while(getline(cin,line)){
++currentLine;

strLine.clear();
strLine.str(line);

while(strLine >> word){

// insert the words into a table

}

} // end getline

//print the words in the table

closedir(pdir);

}

最佳答案

你应该使用 int main()而不是 void main() .

您应该在检查对 opendir() 的调用时出错.

您将需要打开一个文件而不是使用 cin读取文件的内容。而且,当然,您需要确保它被适本地关闭(这可能是什么也不做,让析构函数做它的事情)。

请注意,文件名将是目录名 ( "documents" ) 和 readdir() 返回的文件名的组合.

另请注意,您可能应该检查目录(或者至少检查 ".""..",当前目录和父目录)。

本书"Ruminations on C++" Andrew Koenig 和 Barbara Moo 有一章讨论如何包装 opendir() C++ 中的函数系列,使它们在 C++ 程序中表现得更好。


希瑟问:

What do I put in getline() instead of cin?

目前的代码从标准输入读取,又名 cin眼下。这意味着如果您使用 ./a.out < program.cpp 启动您的程序, 它会读取你的 program.cpp文件,不管它在目录中找到什么。因此,您需要根据使用 readdir() 找到的文件创建一个新的输入文件流。 :

while (pent = readdir(pdir))
{
...create name from "documents" and pent->d_name
...check that name is not a directory
...open the file for reading (only) and check that it succeeded
...use a variable such as fin for the file stream
// read in values line by line, then word by word
while (getline(fin, line))
{
...processing of lines as before...
}
}

您可能只需打开目录就可以逃脱,因为第一次读取操作(通过 getline() )将失败(但您可能应该根据名称跳过 ... 目录条目)。如果fin是循环中的局部变量,那么当外循环循环时,fin将被销毁,这应该关闭文件。

关于c++ - <dirent.h> 的新手,试图访问目录中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10200692/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com