Skocz do zawartości

c# - część nazwy pliku


SimianVirus7

Rekomendowane odpowiedzi

Dzień dobry :bye1:

 

Chciałem liznąć trochę czegoś innego niż skryptowy język z gm'a. Mam bardzo podstawową znajomość języka C++ ale zdecydowałem się na C# ze względu na Unity. Używam programu Microsoft Visual Studio i próbuje napisać mój pierwszy okienkowy program (dotychczas tylko konsolowe w C++ (lekcje informatyki)).

 

Sprawa jest pewnie banalna ale męczę się z tym od wczoraj i uważam siebie za głąba, bo pomimo przeczytania znacznej ilości stron na ten temat, nie wiele zrozumiałem. Mianowicie chodzi mi o wyszukiwanie nazwy folderu ale ze znajomością tylko części jego nazwy. Mam coś takiego:

 

GML
public string appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

string dir_mc = appData + @"\.minecraft";

string test = (dir_mc + "\\versions");

 

DirectoryInfo di = new DirectoryInfo(test);

foreach (var fi in di.GetFiles("1.11.2-forge1.11.2*"))

{

textBox2.ForeColor = System.Drawing.Color.Green;

textBox2.Text = "Zainstalowano";

}

 

Podana jest ścieżka do folderu, gdzie są dwa podfoldery:

- 1.11.2

- 1.11.2-forge1.11.2-13.20.0.2227

 

Założenia są takie: Jeśli istnieje folder o nazwie 1.11.2-forge i dalej, to wypisz Zainstalowano

 

Nie mam pojęcia jak to wyjaśnić. Chodzi mi o funkcję jak w MySQL:

Wypisz wszystkie miejscowości na literę M - SELECT nazwa FROM Miejscowosci WHERE nazwa LIKE("M*");

 

Wzorowałem się dzięki przykładom na tej stronie

Odnośnik do komentarza
Udostępnij na innych stronach

Rozwiązałem swój problem. Mózg boli, a gałki oczne odmawiają posłuszeństwa ale było warto ^_^

Okazało się, że to było o wiele prostrze (ale przynajmniej dzięki ćwiczeniom troszkę ogarnąłem pętle foreach której nie miałem na lekcjach informatyki)

 

GML
string dir_mc = appData + @"\.minecraft";

string dir_ver = (dir_mc + "\\versions");

 

string[] folder = Directory.GetDirectories(dir_ver, "1.11.2-forge*");

 

textBox2.ForeColor = System.Drawing.Color.Red;

textBox2.Text = "Minecraft Forge - nie zainstalowano!";

 

foreach (string nazwa in folder)

{

textBox2.ForeColor = System.Drawing.Color.Green;

textBox2.Text = "Minecraft Forge - zainstalowany";

}

 

PS: Nie wiem, czy post usunąć czy zostawić dla przyszłych wojowników C# którzy będą mieli ten sam problem. Boję się o ostrzeżenie w temacie nabijania postów :jezor:

Odnośnik do komentarza
Udostępnij na innych stronach

Logika twojego programu jest dziwna : )

 

Step 1. Pobierz wszystkie katalogi które pasują do podanego wzorca

Step 2. Ustaw domyślne wyświetlanie jako "nie zainstalowano"

Step 3. Dla każdego znalezionego folderu zmień ten sam string na "zainstalowano"

 

Po co robić to dla każdego folderu?

Jeśli chcesz sprawdźić czy znalazł jakikolwiek to nie lepiej:

 

GML
if( folder.length > 0 )

?

 

<zwracam tylko uwagę że uzywasz pętli zupełnie bez sensu>

Odnośnik do komentarza
Udostępnij na innych stronach

Faktycznie, ustawienie domyślnie wyświetlania jako "nie zainstalowano" jest rozsądnym pomysłem ale często piszę program bez uprzedniego planowania dlatego często wychodzą mi takie utrudnienia. Pętlę zastosowałem dlatego, że to była moja jedyna opcja, z którą udało mi się wyszukiwanie folderu, którego znam tylko część nazwy. Przy następnym tworzeniu jakiegokolwiek programu, będę kierował się Twoimi podpowiedziami :thumbsup:

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...