WIN32_FIND_DATA - Holen Sie sich den absoluten Pfad
Ich bin mit so etwas wie dieses:
std::string tempDirectory = "./test/*";
WIN32_FIND_DATA directoryHandle;
memset(&directoryHandle, 0, sizeof(WIN32_FIND_DATA));//perhaps redundant???
std::wstring wideString = std::wstring(tempDirectory.begin(), tempDirectory.end());
LPCWSTR directoryPath = wideString.c_str();
//iterate over all files
HANDLE handle = FindFirstFile(directoryPath, &directoryHandle);
while(INVALID_HANDLE_VALUE != handle)
{
//skip non-files
if (!(directoryHandle.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
//convert from WCHAR to std::string
size_t size = wcslen(directoryHandle.cFileName);
char * buffer = new char [2 * size + 2];
wcstombs(buffer, directoryHandle.cFileName, 2 * size + 2);
std::string file(buffer);
delete [] buffer;
std::cout << file;
}
if(FALSE == FindNextFile(handle, &directoryHandle)) break;
}
//close the handle
FindClose(handle);
welche Drucke die Namen der einzelnen Datei in das relative Verzeichnis ./test/*
.
Gibt es eine Möglichkeit, um zu bestimmen, den absoluten Pfad zu diesem Verzeichnis, wie realpath()
auf Linux, ohne die jegliche 3rd-party-Bibliotheken wie BOOST? Ich würde gerne drucken Sie den absoluten Pfad zu jeder Datei.
Verlangen Sie eine UNC Pfad?
Ich glaube nicht, dass werde ich brauchen, wie eine Allgemeine Lösung. Der lokale Pfad sollte das tun, gerade jetzt in Ordnung (wie in C:\bla\blabla\etc).
Vereinbart, aber in meinem Fall, die Anwendung immer von einem lokalen Laufwerk. Also, was ich Fragen, in diesem speziellen Fall gibt es eine API-Funktion, die zurückkehren können, eine nutzbare absoluten Pfad?
Tipp: Sie können die Beseitigung der memset mit
Ich glaube nicht, dass werde ich brauchen, wie eine Allgemeine Lösung. Der lokale Pfad sollte das tun, gerade jetzt in Ordnung (wie in C:\bla\blabla\etc).
Vereinbart, aber in meinem Fall, die Anwendung immer von einem lokalen Laufwerk. Also, was ich Fragen, in diesem speziellen Fall gibt es eine API-Funktion, die zurückkehren können, eine nutzbare absoluten Pfad?
std::vector<char>
ist einfach ein dynamisch zugewiesen array von char
, so dass, wenn Sie .resize()
es auf die gewünschte Größe, können Sie rufen Sie .data()
um einen Zeiger auf sein erstes element. Zu wcstombs
gibt es keinen Unterschied zwischen Zeiger und ein Zeiger ergab sich durch new
'ing ein array.Tipp: Sie können die Beseitigung der memset mit
WIN32_FIND_DATA directoryHandle = { 0 };
. Gültig in C und C++.InformationsquelleAutor Mihai Todor | 2012-09-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehen die
GetFullPathName
Funktion.GetFullPathName
auf das Verzeichnis, und verbinden Sie es mit dem Datei-Namen inWIN32_FIND_DATA
.und wie ist das gemacht? In meinem Fall (ähnlich wie in der Frage) ich habe einen Pfad mit wildcards wie ein string, aber ich habe nur die Griffe für die gefundenen Dateien. Da der Pfad kann Platzhalter enthalten, ein Verzeichnis eventuell nicht vorhanden ist, also irgendwie ich brauche, um das übergeordnete Verzeichnis der gefundenen Datei und dann bekommen Sie den vollständigen Pfad für das von dir?
Wenn Sie eine neue Frage, bitte Stelle eine neue Frage. Ich weiß nicht, was du meinst mit "ein Verzeichnis kann nicht existieren". Das Verzeichnis ist richtig, es:
./test/*
, das Verzeichnis ist./test
. Wildcards sind nicht erlaubt in das Verzeichnis Teil, so dass immer das Verzeichnis wird nicht verlangen, dass Sie sich mit wildcards.eigentlich die Vollendung der code in der Frage zum drucken der absoluten Pfaden wäre genug. Ich nicht wusste, dass wildcards, wo nur in der directory Teil des Weges, dass auf jeden Fall macht die Dinge einfacher
InformationsquelleAutor Jonathan Potter
Können Sie versuchen, GetFullPathName
Oder verwenden Sie
SetCurrentDirectory
undGetCurrentDirectory
. Möchten Sie vielleicht, um das speichern der aktuellen Verzeichnis, bevor Sie dies tun, so dass Sie gehen zurück, um es anschließend.In beiden Fällen werden Sie nur brauchen, um den vollständigen Pfad zu Ihrer Suche Verzeichnis. API-Aufrufe sind langsam. Innerhalb der Schleife, die Sie einfach kombinieren strings.
InformationsquelleAutor paddy