[C++] Rozpoznawanie czy to folder, czy plik

0

W jaki sposób można rozpoznać, czy plik/folder, do którego mam ścieżkę dostępu to folder, czy plik (np. txt, .mp3)? Początkowo chciałem sprawdzić to, sprawdzając jakim znakiem jest 3 znak od końca ścieżki (czy to kropka) ale to się nie sprawdzi, ponieważ niektóre rozszerzenia mają więcej niż 3 znaki (np. .html) oraz foldery w nazwie również mogą mieć kropkę.

Zna może ktoś jakiś sposób na to? Piszę w WinAPI.

0

nie wiem jak dokładnie ale przy wykorzystaniu funkcji FindFirst()/FindNext() można było to sprawdzić i przy przeglądnięciu czegoś na ich temat możesz znaleźć odpowiedź na to pytanie :-)

0

Tu http://www.winapi.org/index.php?option=com_content&task=view&id=149&Itemid=1 jest algorytm przeszukiwania dysku w Winapi. Jest tam też rozpoznawanie czy nie jest to katalog. Może Ci się to przyda.

0

jezyk C/C++ nie definiuje obslugi systemu pliku az w takich detalach. moze posix/sysv.. jesli uzywasz najnowszych wersji standardu C++ -- uzyj boost::filesystem, tam szybko znajdziesz sposob na okreslenie czy sciezka pokazuje na katalog.. a jesli nie uzywasz boosta, to tylko zatrudnic winapi..

attrib = GetFileAttributes(path);
if ( attrib == 0xFFFFFFFF || !(attrib & FILE_ATTRIBUTE_DIRECTORY) ){
/* not a valid directory */
}

edit:
i jeszcze przyklad spod MFC wykopalem wlasnie..
http://msdn2.microsoft.com/en-us/library/scx99850(vs.71).aspx

0

Wielkie dzięki za wszystkie odpowiedzi.
Bardzo mi pomogliście.

0

Pozwolę sobie na lekki OT.

@quetzalcoatl
Wiesz może czy boost::filesystem oferuje w końcu pracę na wchar_t? Bo poprzednia wersja pod tym względem ssała i nie dało się pracować na katalogach w nazwach których były polskie litery.

0

hm.. szczerze mowiac nie wiem.. a w czym byl problem? jesli iterowales sobie pozawartosci katalogu w ktorym pliki mialy polskie krzaki w nazwach i nie ruszales tych nazw to wydaje mi sie ze nie bylo problemu.. problem moglby sie pojawiac jak wyryles sobie w programie sciezke zawierajaca polskei znaczki.. ale nie, nie wiem. od zarania dziejow, calkowicie umyslnie mam polskie litery gdzies, a (G)UI programow pisze po angielsku :)

0

Iterowałem sobie po nazwach katalogów a potem chciałem otworzyć pliki (wcześniej pobrane właśnie za pomocą directory_iteratora). No i problem w tym, że nie mógł otworzyć plików z takimi znakami. Myślałem że to przez path, więc chciałem użyć wpatch. Okazało się że jest dopiero w planach. GUI po ang. odpadało bo ktoś przecież mógł mieć polski plik ;P

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