0

我必须编写一个程序来遍历给定的文件夹并使用 regex_search 来查找某个字符串的每个实例。我现在已经让 regex_search 自己工作了,我只是想弄清楚如何浏览每个文件。我想尝试使用目录,但不确定我会把它放在哪里。我是否必须将搜索文件放入我的 main 方法中,还是必须在 main 方法之外创建一个单独的函数来遍历每个文件并在 main 方法中调用它?

这就是我现在所拥有的。你们可以就如何解决这个问题提供任何提示,我们将不胜感激!

现在它的功能是读取输入文本文件并输出一个 txt 文件,该文件显示所有实例和每个外观的行号。我不需要查看它们所在的行、使用特定文件或为该程序制作输出文件,我发现的内容将简单地打印到控制台。我已经留下了我现在拥有的东西,因为我不确定我是否会以类似的方式检查每个单独的文件,只是使用不同的 cariable 名称。

#include <iostream>
#include <regex>
#include <string>
#include <fstream>
#include <vector>
#include <regex>
#include <iomanip>

using namespace std;

int main (int argc, char* argv[]){

// validate the command line info
if( argc < 2 ) {
    cout << "Error: Incorrect number of command line arguments\n"
            "Usage: grep\n";
    return EXIT_FAILURE;
}

//Declare the arguments of the array
    string resultSwitch = argv[1]; 
string stringToGrep = argv[2];
string folderName = argv [3];
regex reg(stringToGrep);


// Validate that the file is there and open it
ifstream infile( inputFileName );
if( !infile ) {
    cout << "Error: failed to open <" << inputFileName << ">\n"
            "Check filename, path, or it doesn't exist.\n";
    return EXIT_FAILURE;
}



while(getline(infile,currentLine))
{
    lines.push_back( currentLine ); 
            currentLineNum++;
            if( regex_search( currentLine, reg ) )
                    outFile << "Line " << currentLineNum << ": " << currentLine << endl;



}

    infile.close();
}
4

1 回答 1

3

读取目录/文件夹取决于操作系统。在 UNIX/Linux/MacOS 世界中,您使用opendir(), 和readdir():

#include <sys/types.h>
#include <dirent.h>

...

DIR *directory = opendir( directoryName );

if( directory == NULL )
    {
    perror( directoryName );
    exit( -2 );
    }
// Read the directory, and pull in every file that doesn't start with '.'

struct dirent *entry;
while( NULL != ( entry = readdir(directory) ) )
{
// by convention, UNIX files beginning with '.' are invisible.
// and . and .. are special anyway.
    if( entry->d_name[0] != '.'  )
        {
        // you now have a filename in entry->d_name;
        // do something with it.
        }
}
于 2012-04-16T22:37:39.480 回答