Sprawdzanie istnienia plików bez podawania rozszerzenia

0

Ostatnio zacząłem się bawić w robienie programu działającego jak polecenie "uruchom". Chciałem tam dorobić takie elementy jak min. sprawdzaie jaki program jest uruchamiany i jeśli jest do niego coś dopisane w jakimś pliku zewnętrznym to konkretne operacje są wyonywane (np.: gdy wpiszę "regedit" i będzie w pliku zewnętrznym wpisane polecenie o braku możliwości uruchomienia to by program go nie uruchamiał tylko wyświetlał komunikat o braku dostępu). Ale mniejsza o to.

Bardziej chodzi mi o to, żeby spradzić czy program, plik, itp. istnieje mimo tego, że nie zostało podane jego rozszerzenie.
Z góry dziękuję zapomoc

0

FindFirst+ręczne wyszukiwanie.

0
mugo napisał(a)

Chciałem tam dorobić takie elementy jak min. sprawdzaie jaki program jest uruchamiany i jeśli jest do niego coś dopisane w jakimś pliku zewnętrznym to konkretne operacje są wyonywane (np.: gdy wpiszę "regedit" i będzie w pliku zewnętrznym wpisane polecenie o braku możliwości uruchomienia to by program go nie uruchamiał tylko wyświetlał komunikat o braku dostępu).

No to trzeba zrobić sobie jakąś listę, w której zapisane będą nazwy czy ścieżki programów, które mają "coś dopisane" i jeśli mogą zostać uruchomione to je uruchamiasz, np. przez ShellExecute, a jeśli nie mogą, to nie uruchamiasz - proste;

mugo napisał(a)

Bardziej chodzi mi o to, żeby spradzić czy program, plik, itp. istnieje mimo tego, że nie zostało podane jego rozszerzenie.

No więc trzeba sobie ustalić jakąś regułę, dla jakiej odbędzie się wyszukiwanie; No bo jakiego pliku będziesz szukał, jeśli użytkownik poda nazwę bez rozszerzenia? Domyślnie pewnie system szuka plików wykonywalnych, ale nie sprawdzałem co się dzieje, jeśli w danej lokalizacji jest kilka plików o tej samej nazwie, lecz innym rozszerzeniu; Czy plik o podanej nazwie istnieje możesz sprawdzić za pomocą funkcji FileExists;

Więc czy użytkownik podał nazwę z rozszerzeniem czy nie można sprawdzić za pomocą funkcji ExtractFileExt i jeśli nie podał - szukać pliku wykonywalnego o np. rozszerzeniu exe, albo znaleźć wszystkie o tej nazwie i dowolnym rozszerzeniu i pokazać ich listę po to, by użytkownik mógł wybrać ten właściwy; Wyszukiwanie można oprzeć o funkcje FindFirst i FindNext, ale trzeba także ustalić w jakiej lokalizacji szukać, jeśli użytkownik nie poda ścieżki (którą także można sprawdzić za pomocą ExtractFileDir lub ExtractFilePath);

Zawsze możesz poczytać o tym, jak systemowy modył uruchamiania działa, jakie lokalizacje uwzględnia, jaki przetwarza podaną nazwę pliku na potrzebu samego szukania; Żeby okienko było funkcjonalne możesz także sprawdzić, czy użytkownik podał też parametry uruchomieniowe - ale to tylko ciekawostka/przyszły ficzer;

No i napisz coś więcej o tych "plikach zewnętrznych", w których będą zapisane te magiczne informacje;

0

Zależało mi tylko na tym sprawdzaniu czy plik istnieje bez podawania rozszerzenia. Z tymi plikami zewnętrznymi i operacjami to już poradzę sobie sam. Podałem to tylko po to by mniej wiecej przekazać co chcę osiągnąć by nie dostawać zbędnych pytań typu "A po co Ci to?".

0

I dzięki za odpowiedź. Mam jakiś punkt wyjścia ;)

0
mugo napisał(a)

Zależało mi tylko na tym sprawdzaniu czy plik istnieje bez podawania rozszerzenia.

No więc jeśli chcesz sprawdzić czy plik o podanej nazwie istnieje bez jakiejkolwiek "obróbki" jego nazwy to wykorzystaj funkcję FileExists - jak istnieje, zwróci True, jeśli nie - False;

mugo napisał(a)

Podałem to tylko po to by mniej wiecej przekazać co chcę osiągnąć by nie dostawać zbędnych pytań typu "A po co Ci to?".

Takie pytania też pomagają, bo niekiedy wydaje się, że idzie się w dobrym kierunku i pewne działania są niezbędne do osiągnięcia zamierzonego celu, a później okazuje się, że można napisać inaczej, upraszczając kod i przyspieszając jego działanie;

A tak na marginesie - napisz coś, a jak nie będzie działać to pytaj dalej - na razie nic więcej nie można napisać, bo to tylko spekulacje; Będziesz miał kod to dostaniesz więcej wskazówek;

0

Jeśli oczekujesz, że pliki będą posiadały popularne rozszerzenia, to wystarczy prosta metoda na przechowywanie w tablicy końcówek rozszerzeń. Będzie ich koło 25.

Następnie na podstawie samej nazwy pliku, sprawdzasz istnienie z każdym rozszerzeniem. To w zasadzie wystarczy. Możesz to rozbudować o podawanie, które z rozszerzeń zostało odnalezione. Możesz też nie przerywać szukania na pierwszym pasującym rozszerzeniu, lecz podać pełną listę, jeśli np.: istnieją pliki o takiej samej nazwie ale o różnych końcówkach "plik.exe", "plik.jpg", "plik.zip".

Jest to ta sama metoda, co przeszukiwanie całego katalogu, ponieważ metoda FileExists i tak to co FindFirst ?

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