Herk napisał(a)
www.winapi.org
Dzięki za linka. Zaraz się z nim zapoznam.
Tymczasem pokażę, co udało mi się do tej pory zrobić:
#include <windows.h>
#include <cstring>
#include <cstdio>
#include <iostream>
#include <conio.h>
#include <vector>
#include <string>
using namespace std;
class PathList
{
private:
vector <string> v;
vector <string> :: const_iterator p1;
public:
void add(string);
string take(int);
int size();
int capacity();
};
void PathList :: add(string s)
{
v.push_back(s);
}
string PathList :: take(int x)
{
p1 = v.begin();
p1 = p1 + x;
return *p1;
}
int PathList :: size()
{
return v.size();
}
int PathList :: capacity()
{
return v.capacity();
}
// Funkcja budujaca sciezke wg. wzoru: Directory\FileName
char* BuildPath(const char* Directory, const char* FileName)
{
size_t required_space;
char* retval;
size_t directory_len;
directory_len = strlen(Directory) + 1;
required_space = directory_len + strlen(FileName) + 1;
retval = new char[required_space];
strncpy(retval, Directory, directory_len);
retval[directory_len--] = 0;
retval[directory_len] = '\\';
strcat(retval, FileName);
return retval;
}
// Funkcja wyrzucajaca na wyscie wszystkie podkatalogi (rekurencyjnie)
void ShowSubdirs(const char* Directory, PathList &vec)
{
WIN32_FIND_DATA wfdata;
HANDLE hsearch;
char* spath;
spath = BuildPath(Directory, "*");
if (hsearch = FindFirstFile(spath, &wfdata))
{
delete[] spath;
spath = NULL;
do
{
if (wfdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
spath = BuildPath(Directory, wfdata.cFileName);
if(spath[strlen(spath)-1] != '.')
vec.add(spath);
if (!(wfdata.cFileName[0]=='.' && wfdata.cFileName[1]==0) &&
!(wfdata.cFileName[0]=='.' && wfdata.cFileName[1]=='.' &&
wfdata.cFileName[2]==0))
{
ShowSubdirs(spath, vec);
}
delete[] spath;
spath = NULL;
}
}
while (FindNextFile(hsearch, &wfdata));
FindClose(hsearch);
}
delete[] spath;
}
int main()
{
PathList x; // tworze vector
ShowSubdirs("f:\\test", x); // zapisuje do vectora podkatalogi
for(int i=0; i<x.size(); i++) // wypisuje podkatalogi na ekran
{
cout << x.take(i) << endl;
}
getch();
return 0;
}
Funkcje BuildPath() i ShowSubdirs() znalazłem gdzieś w sieci.
Zrobiłem sobie taką małą klasę PathList i jak na razie działa!
Znajduje wszystkie podkatalogi w katalogu podanym jako argument funkcji ShowSubdirs().
Teraz muszę w każdym z tych katalogów znaleźć pliki, które są zgodne z podaną maską i
jak na razie nigdzie nie mogę znaleźć jak przeszukać katalog w poszukiwaniu plików zgodnych z maską.
Znalazłem tylko funkcję, która znajduje pliki i podkatalogi w danym katalogu.
Katalogi mogę odsiać porównując je z zawartością vectora, który już mam,
ale jak wybrać z tego, co zostanie (listy plików) te pliki, które odpowiadają masce?
--
Szach