Permalänk
Medlem

C++ filhantering

Hej

Jag tänkte göra ett litet program som söker i en databas efter vilka pc-spel som finns i min kompis spelsamling, det finns ett par hundra :P. Och då bordde det självklara valet vara att använda filhantering (Programmerar i c++). Men då undrar jag hur man, om man har alla spelnamn i ett textdokument, kan söka via programet som sedan letar upp rätt namn och meddelar om spelet hittades eller ej.

Kortfattat: Hur kan man söka med hjälp av filhantering i c++?

Visa gärna med lite kod.

Tack på förhand //Simon Forslund

Permalänk
Medlem

Vad jag vet så finns det inga standardbibliotek för C++ som erbjuder sökningar i filsystemet men om du programmerar på Windows (vilket jag antar eftersom din kompis har många spel) så bör du kunna använda detta:

(Det här är gammal kod som jag grävt upp ur mina gömmor. Kanske lite fult skrivet men du bör kunna lista ut hur du använder det. Annars kan du ju söka WIN32_FIND_DATA på Google så bör du få bra träffar med tutorials osv.)

void scandir(const char* start_directory) { char* directory = new char[maxdirsize]; strcpy(directory, start_directory); strcat(directory, "\\*"); WIN32_FIND_DATA finddata; HANDLE found = FindFirstFile(directory, &finddata); bool more = (found != INVALID_HANDLE_VALUE); while (more) { if (finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if (strcmp(finddata.cFileName, ".") && strcmp(finddata.cFileName, "..")) { //Detta är en undermapp, så vi lägger till den på listan av mappar //och går igenom allt som finns inuti den. char* folder = new char[maxdirsize]; strcpy(folder, start_directory); strcat(folder, "\\"); strcat(folder, finddata.cFileName); folders.push_back(folder); scandir(folder);//Rekursionspunkt } } else { //Detta är en fil. Lägg till den i listan på filer. char* file = new char[maxdirsize]; strcpy(file, start_directory); strcat(file, "\\"); strcat(file, finddata.cFileName); files.push_back(file); } more = !(!FindNextFile(found, &finddata)); } FindClose(found); //Frigör directory, den var endast till för temporär användning. delete[] directory; }

Permalänk
Medlem

Förlåt för att det dröjde..:P Jag vet inte om någon "sökning" är nödvändig för mitt projekt. Programet jag ska göra är som ett litet index för vilka spel som min kompis har och inte har, man söker på ett namn tex. sims 2 och om sims 2 finns med i databasen som är ett textdokument så säger programet en viss sak och om det inte finns så säger programet en annan sak.

Hoppas du/ni förstod.

Permalänk
Medlem

I textdokumentet har du varje titel på varsin rad.

I programet så matar du in vad du ska söka efter, läser
in första raden och gemför med det du valt att söka efter

Är det inte en match läser den in nästa rad och kollar...

Så gör den tills den hittat ditt spel eller när listan är tömd
säger att det inte finns.

Vill du underlätta så gör inmatningen t.ex via en struct och skriv
ut storleken på strukt till dokumentet, då vet ditt program
sen när det läser in hur många "poster" det finns.

Permalänk
Medlem

Ok..Jag förstår, men om du har tid och ork så får du gärna visa med lite kod.

Jag lär mig bättre med exempel.

Permalänk
Medlem

#include <iostream> #include <fstream> #include <string> int main() { std::string gamename, gameline; std::ifstream gamefile("games.db"); int hit = 0; if (!gamefile.is_open()) { std::cout << "file not found." << std::endl; return 1; } gamename = "the sims"; while (getline(gamefile, gameline)) if (gamename.find(gameline) != std::string::npos) std::cout << "["<< ++hit << "]" << gameline << std::endl; if (hit == 0) std::cout << "no games found :/" << std::endl; return 0; }

du vill antagligen använda något annat är find.

Permalänk

Borde det inte vara smidigare och lättare att göra dett i php eller asp? Ett webbaserat listningssystem där du kan söka genom antingen en text-fil eller en databas. Sen är det ju väldigt simpelt att göra en form där du lätt kan lägga till spel till slutet av textfilen/databasen? Men du kanske kräver att det ska vara c++?

Visa signatur

-Jag har visst vart ute idag.
-Vart då?
-Ne, jag öppnade fönstret förut...
www.iampear.com Hakona Matata!