Pobranie nazwy katalagów w folderze

0

Witam,

mam jeden problem. Powiedzmy, że posiadam folder o nazwie Save, w którym znajduje się tylko JEDEN katalog, lecz nie znam jego nazwy, gdyż jest ona zmienna. Jak więc pobrać taki katalog? Domyślam się, że to coś z listowaniem katalogów, lecz nie wiem jak tego użyć w praktyce.

Pozdrawiam.

0

Czy c++11?
Czy używasz boost'a?
Jeżeli poprzednie dwa pytania NIE to trzeba to zrobić zależnym od platformy, inaczej to się robi w unixach a inaczej w windowsach, więc podaj system.

0

Nie używam boost'a, ani C++ 11.

System to Windows. Zależy mi właśnie tylko na tej, jednej platformie.

0

Sorry, że tak późno odpowiadam, ale wcześniej nie dałem rady.

Otóż użyłem tej funkcji, którą dałeś jednak zwraca ona tylko "." Poczytałem trochę i wychodzi na to, że tak będzie zawsze ponieważ wskazuje na nadrzędny katalog (?) i nie da rady tego ominąć. Jednak tutaj http://msdn.microsoft.com/en-us/library/windows/desktop/aa364418%28v=vs.85%29.aspx był również link do funkcji http://msdn.microsoft.com/en-us/library/windows/desktop/aa364428(v=vs.85).aspx . Chcę jej użyć, lecz niestety nie wiem jak :D. Na razie mam coś takiego:

int main()
{

WIN32_FIND_DATA
 FindFileData;




  HANDLE hFind = FindFirstFile("C:/*", &FindFileData);
  _tprintf (TEXT ( "pierwszy znaleziony plik jest %s\n " ),
                FindFileData.cFileName);
if (FindNextFile(hFind, &FindFileData))
		{
			FindClose(hFind);
			hFind = INVALID_HANDLE_VALUE;
		}
	}
}

Jednak to nie wyszukuje następnego pliku po "." ;/. Mógłby ktoś naprowadzić co jest nie tak?

Pozdrawiam.

0

Kod działa u mnie. Osobiście używam \ zamiast / w ścieżkach.
Sprawdzaj czy FindFirstFile sie powiodło:

WIN32_FIND_DATA	FindFileData;

HANDLE hFind = FindFirstFile("D:/*", &FindFileData);

if(INVALID_HANDLE_VALUE != hFind)
{
	std::cout << "pierwszy znaleziony plik jest: " << FindFileData.cFileName << std::endl;
	if (FindNextFile(hFind, &FindFileData))
	{
		std::cout << "drugi znaleziony plik jest: " << FindFileData.cFileName << std::endl;			
	}
	else
	{
		std::cout << "FNF failed: " << GetLastError() <<  std::endl;
	}
	
	FindClose(hFind);
	hFind = INVALID_HANDLE_VALUE;
}
else
{
	std::cout << "FFF failed: " << GetLastError() << std::endl;
}

Zobacz jaki błąd Ci się pokazuje.

0

Ok, teraz działa :). Mam tylko jeszcze pytanie jak zapisać konkretny następny folder do zmiennej? Chodzi o to, że pierwszy folder to: '.', drugi to '..', a dopiero 3 to ten, który chciałem. Chcę go więc zapisać do zmiennej, tak by później go od razu wyświetlić.

0
TCHAR    cFileName[MAX_PATH];
memcpy(cFileName,FindFileData.cFileName,sizeof(cFileName));
0

Działa! Serdecznie dziękuje za pomoc. Można zamknąć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1