Wie kann ich die Liste der Dateien in einem Verzeichnis in meinem C- oder C++-Code ermitteln?
Ich darf das Programm nicht ausführen. ls
Befehl und analysiere die Ergebnisse in meinem Programm.
Wie kann ich die Liste der Dateien in einem Verzeichnis in meinem C- oder C++-Code ermitteln?
Ich darf das Programm nicht ausführen. ls
Befehl und analysiere die Ergebnisse in meinem Programm.
Sehen Sie sich diese Klasse an, die die Win32-Api verwendet. Konstruieren Sie einfach eine Instanz, indem Sie die foldername
von dem Sie die Auflistung wünschen, rufen Sie dann die getNextFile
Methode, um die nächste filename
aus dem Verzeichnis. Ich denke, es braucht windows.h
et stdio.h
.
class FileGetter{
WIN32_FIND_DATAA found;
HANDLE hfind;
char folderstar[255];
int chk;
public:
FileGetter(char* folder){
sprintf(folderstar,"%s\\*.*",folder);
hfind = FindFirstFileA(folderstar,&found);
//skip .
FindNextFileA(hfind,&found);
}
int getNextFile(char* fname){
//skips .. when called for the first time
chk=FindNextFileA(hfind,&found);
if (chk)
strcpy(fname, found.cFileName);
return chk;
}
};
GNU-Handbuch FTW
Außerdem ist es manchmal gut, direkt zur Quelle zu gehen (Wortspiel beabsichtigt). Man kann eine Menge lernen, wenn man sich das Innenleben einiger der gängigsten Befehle in Linux ansieht. Ich habe einen einfachen Spiegel von GNU's coreutils auf github eingerichtet (zum Lesen).
https://github.com/homer6/gnu_coreutils/blob/master/src/ls.c
Dies betrifft vielleicht nicht Windows, aber eine Reihe von Fällen, in denen Unix-Varianten verwendet werden, lassen sich mit diesen Methoden lösen.
Ich hoffe, das hilft...
Die Antwort von Shreevardhan ist sehr gut. Aber wenn Sie es in C++14 verwenden möchten, nehmen Sie einfach eine Änderung vor namespace fs = experimental::filesystem;
d.h.,
#include <string>
#include <iostream>
#include <filesystem>
using namespace std;
namespace fs = experimental::filesystem;
int main()
{
string path = "C:\\splits\\";
for (auto & p : fs::directory_iterator(path))
cout << p << endl;
int n;
cin >> n;
}
char **getKeys(char *data_dir, char* tablename, int *num_keys)
{
char** arr = malloc(MAX_RECORDS_PER_TABLE*sizeof(char*));
int i = 0;
for (;i < MAX_RECORDS_PER_TABLE; i++)
arr[i] = malloc( (MAX_KEY_LEN+1) * sizeof(char) );
char *buf = (char *)malloc( (MAX_KEY_LEN+1)*sizeof(char) );
snprintf(buf, MAX_KEY_LEN+1, "%s/%s", data_dir, tablename);
DIR* tableDir = opendir(buf);
struct dirent* getInfo;
readdir(tableDir); // ignore '.'
readdir(tableDir); // ignore '..'
i = 0;
while(1)
{
getInfo = readdir(tableDir);
if (getInfo == 0)
break;
strcpy(arr[i++], getInfo->d_name);
}
*(num_keys) = i;
return arr;
}
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.