Hallo.
Warum soll das in einen Array? Pack's doch in ne
Liste!
Aber da du den Array schon komplett falsch gebrauchst, gehe ich mal davon aus, dass du dich mit C/C++ nicht so gut auskennst und deswegen auch mit Generics Probleme haben könntest...
Was passiert denn bei diesem Befehl?
private:
std::wstring ArrayKat[];
Es wird ein POINTER auf einen Speicherbereich gelegt. Allerdings hast du den Speicherbereich nicht reserviert. Du überschreibst also wahllos irgendwo deinen Haupspeicher, weswegen das Betriebssystem dein Programm abschießt.
Jedenfalls hast du zwei Möglichkeiten: Entweder du zählst die Anzahl der Dateien vorher und reservierst im Konstruktor den nötigen Speicher, oder aber du hast eine eigene Funktion, die Daten hinzufügt.
Da ich eher ein C-Mann bin, kommt hier mal meine Lösung ohne Gewähr (mit flexibler Speicherverwaltung):
class DirectoryListing{
private:
std::wstring ArrayKat[];
int size;
public:
DirectoryListing();
~DirectoryListing();
addFile(std::wstring filename);
findFiles(std::wstring dir);
};
DirectoryListing::DirectoryListing() {
ArrayKat = NULL;
size = 0;
}
DirectoryListing::~DirectoryListing() {
}
DirectoryListing::addFile(std::wstring filename) {
int idx = size;
size++;
ArrayKat = realloc(ArrayKat, size * sizeof(std::wstring));
ArrayKat[idx] = filename;
}
// die nächste ist von dir kopiert, das "dir" ist natürlich passend einzusetzen.
DirectoryListing::findFiles(std::wstring dir) {
// hier irgendwie das "dir" vernünftig verwenden
wstring Ordner = _wgetcwd(NULL, 0) + (wstring) L"\\UnterOrdner\\*";
WIN32_FIND_DATA wfd;
HANDLE fHandle = FindFirstFile(Ordner.c_str(),&wfd);
int Index = 0;
do{
if (!( (wfd.cFileName[0]=='.') && ( (wfd.cFileName[1]=='.' && wfd.cFileName[2]==0) || wfd.cFileName[1]==0 ) )){
if (!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)){//wenn kein Ordner
// NEIN
//ArrayKat[Index] = (wstring) wfd.cFileName;
//Index++;
addFile( (wstring) wfd.cFileName );
}
}
}while (FindNextFile(fHandle,&wfd));
FindClose(fHandle);
// MessageBox(NULL,Ordner.c_str(), Str(AnzWitze).c_str(), MB_OK);
};
}
außerdem solltest du dir angewöhnen, solche dicken Befehle aus dem Konstruktor rauszulassen - dafür ist der nicht gedacht.
mfg