Archief - [PROG][C++] zoeken welke mappen en bestanden er in een bepaalde map zitten

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

DarkCHronicle

Legacy Member
Na wat googlen en gezoek op dit forum vind k niet meteen een oplossing op volgende vraag:

Is er een manier om te kijken welke bestanden en mappen er in een bepaalde map zitten en er dan een lijst van te maken?

deze lijst zou dan moeten kunnen worden opgeslagen in een bestand of bvb een array.

PS.: Dit alles zou dus moeten gebeuren met c++...

alvast bedankt

DarkCHronicle

Legacy Member
mja, daar kan k nie zoveel uit opmake, en k heb al geleze da het in de meeste talen makkelijk is om te doen, maar niet in c++ :s...

killgore

Legacy Member
ALS je compiler dirent.h of dir.h ondersteund (er zijn er vele, maar niet alle, visual studio bv heeft het al niet bij mijn weten) is het vrij simpel hoor ;).

vbtje:

Code:
#include <dirent.h>
#include <iostream>
using namespace std;
//Get rid of idiotic c-definition
typedef struct dirent direntry;

int main()
{
    DIR *dir;
    direntry *entry;
    if(dir = opendir("C:\\"))
    {
        while(entry = readdir(dir))
        {
            cout << entry->d_name << endl;
        }
        closedir(dir);
    }
    cin.get();
    return 0;
}

edit: http://www.informit.com/guides/content.asp?g=cplusplus&seqNum=245&rl=1

edit2: ik denk als je de juiste downloads vind dat je het ook wel kan laten werken onder compilers die het (nog) niet ondersteunen, maar dan kan je evengoed ook een andere api voor dit soort zaken zoeken die wat uitgebreider is :).

Vich

Legacy Member
Hier een stukje uit m'n opensource webserver project, het gebruikt winapi:

Code:
bool HttpServer::HandleServerGetFolderRequest(SOCKET ioIncomingSocket, const string& inFolderName)
{
	HANDLE				find_handle;
	WIN32_FIND_DATAA	find_data;
	string				folder_location(mServerRoot + inFolderName + "*");
	char				path[MAX_PATH_SIZE];

	// Prevention buffer overrun
	str::MakeBufferSafe(folder_location, MAX_PATH_SIZE);

	strcpy(path, folder_location.c_str());

	find_handle = FindFirstFileA(path, &find_data);
	if (find_handle == INVALID_HANDLE_VALUE || !(find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
		return false;

	std::vector<WIN32_FIND_DATAA> list;
	string temp;
	// Find all the files in the folder and store its info into the list
	while (FindNextFileA(find_handle, &find_data))
	{
		temp = (string)find_data.cFileName;
		forEach(str::StringList::const_iterator, it, mIndexPages)
		{
			if (*it == temp)
				return HandleServerGetFileRequest(ioIncomingSocket, inFolderName + temp);
		}

		if (find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
			temp += '/';

		list.push_back(find_data);
	}

DarkCHronicle

Legacy Member
killgore zei:
ALS je compiler dirent.h of dir.h ondersteund (er zijn er vele, maar niet alle, visual studio bv heeft het al niet bij mijn weten) is het vrij simpel hoor ;).

En jawel, DevC++ ondersteunt dirent.h! Kga er morgen meteen mee beginnen experimenteren. muchos dank ;)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan