Pobranie nazwy katalogu majac nazwe pliku

0

Zastanawiam sie, jak zrobic cos takiego: uzytkownik podaje mi nazwe pliku, a ja z niej mam wziac nazwe katalogu, w ktorym jest plik - jest to w ogole mozliwe? Moge uzywac tylko C uniksowego -.-".

Ewentualnie, jak z nazwy przypuscmy takiej: /home/user/Desktop/plik.txt pobrac nazwe katalogu i wszystkie z niego pliki?

0

uzytkownik podaje mi nazwe pliku, a ja z niej mam wziac nazwe katalogu, w ktorym jest plik

Jeżeli masz tylko nazwę pliku, to w zasadzie możesz przeszukiwać wszystkie katalogi obecne w systemie plików, ale co w takim przypadku:

/folder/a/plik.txt
/folder/b/plik.txt
/folder/c/coś innego.txt
/plik.txt

Co powinien zwrócić program, który szuka plik.txt?

0

Zastanawiam sie, jak zrobic cos takiego: uzytkownik podaje mi nazwe pliku, a ja z niej mam wziac nazwe katalogu, w ktorym jest plik - jest to w ogole mozliwe? Moge uzywac tylko C uniksowego -.-".

Jedyne co mi przychodzi do głowy to przeszukanie dysku pod kątem znanej nazwy pliku; No bo jak inaczej? Są jakieś kryteria wyszukiwania, czy tylko znana jest sama nazwa pliku? Ten sposób jest jednak mało dokładny, bo plików o podobnej nazwie może być setki, stąd nigdy nie wiadomo czy trafisz na właściwy;

Ewentualnie, jak z nazwy przypuscmy takiej: /home/user/Desktop/plik.txt pobrac nazwe katalogu i wszystkie z niego pliki?

Bardzo łatwo - wystarczy prosta funkcja, która pobierze indeks ostatniego slesza i skopiuje część łańcucha aż do znalezionego indeksu; Nie znam C, ale poszukaj, może jakaś "wbudowana" funkcja jest do wyciągania ścieżki; Do wyszukiwania plików na dysku też masz zapewne gotowe fukcje, więc szukaj;

0

Domyślam się, że jeśli user poda tylko nazwę pliku, to chodzi o katalog roboczy programu – w takim wypadku ścieżkę (wraz z nazwą pliku wykonywalnego) masz w argv[0].

Do do drugiego pytania: wystarczy znaleźć ostatni znak / i w jego miejsce wstawić '\0'.

0

też mi przyszło do głowy tylko wyszukiwanie, ale pomyslalem, ze moze znacie jakis lepszy sposob:) no nic, ide dalej meczyc to c

0
jareek napisał(a)

też mi przyszło do głowy tylko wyszukiwanie, ale pomyslalem, ze moze znacie jakis lepszy sposob:)

No to pomyśl (tak na logikę) - możesz:

  • nic nie znaleźć,
  • znaleźć jeden,
  • znaleźć wiele,

jeśli nie znajdziesz żadnego to wiadomo - nie ma takiego pliku, ale jeśli znajdziesz więcej niż jeden to skąd program ma wiedzieć o który plik chodzi użytkownikowi? Nie ma możliwości tego jasno stwierdzić (przynajmniej dla plików innych, niż wykonywalne);

Jeśli użytkownik szukałby pliku wykonywalnego jakiejś aplikacji to istnieje sposób na wskazanie właściwego (ale to też nie będzie super skuteczne) - można oprócz samej nazwy pliku posłużyć się tagami - np. szukać pliku o nazwie opera.exe, gdzie np. producentem jest Opera Software, czy według nazwy produktu, którą jest Opera Internte Browser; Te tagi możesz podglądnąć we właściwościach pliku, w zakłądce Wersja (WinXP);

Kiedyś pisałem program do tworzenia plików z zasobami, gdzie podczas instalacji trzeba było wskazać plik brcc32.exe; Po jego wybraniu algorytm odczytywał tagi dzięki czemu program miał większą pewność, że użytkownik wskazał właściwy plik, jednak 100% pewności nigdy nie ma;

Przy plikach innych niż wykonywalne także możesz sprawdzać pewne informacje, ale to nigdy nie będzie super dokładne/bezpieczne;

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