Sprawdzanie czy istnieje folder
Ostatnio zmodyfikowano 2012-12-13 21:34
mostrom Temat założony przez niniejszego użytkownika |
Sprawdzanie czy istnieje folder » 2012-12-12 22:19:02 Witam! struct stat st; if( stat( "/katalog", & st ) == 0 ) cout << "folder istnieje"; else { cout << "nie ma folderu"; exit( 0 ); }
Rozumiem, że powyższy kod działa tylko na poziomie katalogu w którym znajduje się program. Jak sprawdzić poprawność całej ścieżki? Obrałem algorytm sprawdzania poprawności ścieżki "od tyłu", aż do momentu kiedy program nie stwierdzi że ten katalog już istnieje. Czyli mamy ciąg string path = "C:/Programy/Katalog/asdasd"; Program sprawdza najpierw czy istnieje asdasd, potem Katalog, potem Programy itd. Sprawdza dopóty, dopóki nie napotka istniejącego katalogu. Jednak nie umiem zrealizować tego algorytmu, bo nie umiem przenieść względności funkcji stat(). Macie jakiś sposób? Dodam, że narazie pracuję na Windowsie |
|
jsc |
» 2012-12-12 22:21:06 Nie lepiej trzasnąć z miejsca ścieżkę bezwzględną? |
|
Savail |
» 2012-12-12 22:34:27 Najlepiej i najszybciej jest użyć gotowych bibliotek. Boost filesystem to chyba jedna z najlepszych w tych sprawach, jest także przenośna więc jej znajomość na pewno nie zaszkodzi :) |
|
akwes |
» 2012-12-13 15:07:55 GetModuleFileName function (Windows) możesz użyć tej funkcji, aby od razu określić swoje położenie, nie musząc go sprawdzać. Lub po polsku: GetModuleFileNameJeżeli bardzo Ci zależy na sprawdzeniu czy folder istnieje, możesz poszukać podobnej jak wyżej funkcji winapi lub skorzystać z: funkcja access (const char * sciezka, int tryb); znajduje się w bibliotece unistd.h i przyjmuje dwa argumenty z czego pierwszy to ścieżka do katalogu bądź pliku który chcemy sprawdzić, a drugi to tryb czyli to co chcemy sprawdzić. W bibliotece unistd.h są zdefiniowane następujące tryby: R_OK - test na możliwość odczytywania pliku W_OK - test na możliwość zapisu pliku E_OK - test na mozliwość wykonania pliku i F_OK - test na to czy istnieje katalog lub plik funckja access(sciezka, tryp); zwraca wartość typu integer i jeżeli wykona się poprawnie (czyli test zakończy się sukcesem) zwróci 0, a jeżeli niepoprawnie (czyli test się nie powiedzie) zwróci -1.
|
|
|
mostrom Temat założony przez niniejszego użytkownika |
» 2012-12-13 21:34:03 Akwes, funkcja access okazała się doskonała i prosta :) Dziękuję za konkretne odpowiedzi.
Potrzebuję sprawdzać poprawność katalogu, ponieważ to użytkownik wprowadza ścieżkę, do której później zapisywane są pliki. Muszę wychwytywać błąd w podaniu ścieżki i ewentualnie tworzyć takie katalogi, jak napisał użytkownik. |
|
« 1 » |