Autor |
Beitrag |
epinephrine87
      
Beiträge: 17
Windows Vista Ultimate x64
C# (Visual Studio Express 08)
|
Verfasst: Do 02.07.09 17:47
Hallöchen
Ich bin relativ neu im bereich CSharp/C# und habe ein kleines Problem bzw. Mehrere aber dazu später mehr.
Mein erstes Problem besteht darin dass ich bei
C#-Quelltext 1: 2: 3: 4: 5: 6:
| string path = "D:\\ArmA 2"; foreach (string mods in Directory.GetFiles(path)); checkedListBox1.Items.Add(mods); | leider in der letzten zeile die Variable unterstrichen bekomme also diese quasi garnicht ansprechbar ist, woran könnte das liegen?
Das nächste Problem bestände darin dass die Ordner ein @ vor dem Namen tragen welches ich gern in der Liste nicht sehen möchte, kann mir beim besten willen aber nicht vorstellen wie das funktionieren soll.
Dann wäre da noch die Auswahl der Checkboxes in der Liste, wo ich wiederum nicht weis wie ich diese dynamisch ausgeben kann, denn bei jeder checkbox müsste die variable "-mod=@ordnername " ausgeben und damit komme ich nicht klar.
Würde mich freuen wenn mir da jemand weiterhelfen könnte.
Mfg
Andi
Moderiert von Christian S.: Code- durch C#-Tags ersetzt
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 02.07.09 18:28
Hallo und  !
Durch das Semikolon am Ende der foreach Zeile schließt du den Befehl ab. Wenn du den folgenden Befehl darin ausführen willst, dann nimm das Semikolon weg. 
|
|
epinephrine87 
      
Beiträge: 17
Windows Vista Ultimate x64
C# (Visual Studio Express 08)
|
Verfasst: Do 02.07.09 18:34
|
|
Kato
Hält's aus hier
Beiträge: 13
|
Verfasst: Do 02.07.09 18:58
Hallo epinephrine87,
mit
C#-Quelltext 1: 2: 3: 4:
| if(mods.StartsWith("@")) { checkListBox1.Items.Add(mods); } |
dürfte er nur die Strings beginnend mit einem @ an deiner Liste anfügen.
Zuletzt bearbeitet von Kato am Do 02.07.09 19:01, insgesamt 2-mal bearbeitet
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 02.07.09 18:58
Naja, den ersten Buchstaben prüfen und ggf. dann entfernen und in die Liste eintragen. Das sollte so gehen: C#-Quelltext 1: 2:
| if (mods[0] == "@") checkedListBox1.Items.Add(mods.SubString(1, mods.Length - 1)); | // EDIT:
Ach ja, StartsWith gibts auch, daran habe ich mich gar nicht erinnert. Aber als zweite Zeile passt dann ja das von mir mit SubString.
// EDIT2:
Und  an Kato. 
Zuletzt bearbeitet von jaenicke am Do 02.07.09 19:03, insgesamt 2-mal bearbeitet
|
|
Kato
Hält's aus hier
Beiträge: 13
|
Verfasst: Do 02.07.09 18:59
*edit* woops, verklickt oder so
|
|
epinephrine87 
      
Beiträge: 17
Windows Vista Ultimate x64
C# (Visual Studio Express 08)
|
Verfasst: Do 02.07.09 19:04
Kato hat folgendes geschrieben : | *edit* woops, verklickt oder so |
Hmm ja das mache ich ja, aber die box bleibt leer, wahrscheinlich weil der code nur nach files und nicht folders sucht, finde aber für die Suche nach ordnern keinen Passenden befehl oO
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 02.07.09 19:05
Naja, wie wäre es mit GetDirectories statt GetFiles?
msdn.microsoft.com/e....getdirectories.aspx
|
|
Kato
Hält's aus hier
Beiträge: 13
|
Verfasst: Do 02.07.09 19:06
um Ordner auszulefen versuch es mal mit
C#-Quelltext 1:
| Directory.GetDirectories("C:\Pfad", "", SearchOption.TopDirectoryOnly); |
Bin mir nicht sicher, habe es nicht ausprobiert, nur beim kurzem nachsehen entdeckt.
Und danke an jaenicke
EDIT: oh man, der jaenicke ist schneller als ich 
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Do 02.07.09 19:10
epinephrine87 hat folgendes geschrieben : | ... finde aber für die Suche nach ordnern keinen Passenden befehl oO |
Directory.GetFiles hat auch eine Überladung mit SearchOption. Alternativ kannst du auch mit GetDirectories arbeiten oder die Methoden von DirectoryInfo benutzen (je nachdem, worauf es dir ankommt).
Gruß Jürgen
Ach, andere waren schneller.
|
|
epinephrine87 
      
Beiträge: 17
Windows Vista Ultimate x64
C# (Visual Studio Express 08)
|
Verfasst: Do 02.07.09 19:28
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| private void Form1_Load(object sender, EventArgs e) { ///Deklaration "Path" im späteren Verlauf per Usereingabe. string path = "D:\\ArmA 2"; ///Auflistung foreach (string mods in Directory.GetDirectories(path)) { if (mods.StartsWith("@")) { checkedListBox1.Items.Add(mods); } } |
Funktioniert nicht, also es wird nichts angezeigt obwohl im Zielverzeichnis ein ordner mit einem @ vorne dran existiert.
Genauso auch mit dem Quelltext 1: 2:
| if (mods[0] == "@") checkedListBox1.Items.Add(mods.SubString(1, mods.Length - 1)); |
und dem
Quelltext 1:
| Directory.GetDirectories("C:\Pfad", "", SearchOption.TopDirectoryOnly) |
entweder bin ich echt Dumm oder aber es funktioniert in der Tat so nicht.
Kann das sein dass ich das @ mit einer Char ID ersetzen muss?
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 02.07.09 20:03
Ich habe vergessen, dass GetDirectories den kompletten Pfad zurückliefert. Abgesehen davon muss man ja nicht selbst filtern, so sollte es klappen: C#-Quelltext 1: 2:
| foreach (string mods in Directory.GetDirectories(path, "@*")) checkedListBox1.Items.Add(mods); |
|
|
epinephrine87 
      
Beiträge: 17
Windows Vista Ultimate x64
C# (Visual Studio Express 08)
|
Verfasst: Do 02.07.09 20:13
|
|
Kato
Hält's aus hier
Beiträge: 13
|
Verfasst: Do 02.07.09 20:21
du könntest mit "mods.Split(@'\')"; arbeiten und einfach das letzt Element nehmen. Die Split Funktion teil einen String in mehrere Teile und zwar an der stelle wo der "seperator" steht. Also wenn du der Funktion ein 'e' übergibst trennt er immer da wo ein e steht. Du bekommst von der Funktion ein string[] zurück, wobei die seperatoren quasi "rausgelöscht" sind.
Beispiel
C#-Quelltext 1: 2:
| string s = @"Das\ist\mein\Text"; string[] arr = s.Split(@'\'); |
Der inhalt von arr ist dann folgender
C#-Quelltext 1: 2: 3: 4:
| arr[0] = "Das"; arr[1] = "ist"; arr[2] = "mein"; arr[3] = "Text"; |
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 02.07.09 20:31
Wie wäre es eher so: C#-Quelltext 1: 2:
| foreach (string mods in Directory.GetDirectories(path, "@*")) checkedListBox1.Items.Add(Path.GetFileName(mods).Substring(1)); | Nebenbei: Deine Variable path zu nennen ist suboptimal...
Nimm lieber aussagekräftige Bezeichner, die so vermutlich nicht auch irgendwo schon existieren werden (hier System.IO.Path). 
|
|
epinephrine87 
      
Beiträge: 17
Windows Vista Ultimate x64
C# (Visual Studio Express 08)
|
Verfasst: Do 02.07.09 20:57
jaenicke hat folgendes geschrieben : | Wie wäre es eher so: C#-Quelltext 1: 2:
| foreach (string mods in Directory.GetDirectories(path, "@*")) checkedListBox1.Items.Add(Path.GetFileName(mods).Substring(1)); | Nebenbei: Deine Variable path zu nennen ist suboptimal...
Nimm lieber aussagekräftige Bezeichner, die so vermutlich nicht auch irgendwo schon existieren werden (hier System.IO.Path).  |
Hmm mit Substring wäre eine Gute Idee doch der Pfad ist immer unterschiedlich, denn nicht jeder Spieler hat das Spiel auf dem Selben Pfad Installiert, ansonsten hätte ich ja sogut wie garkeine probleme damit gehabt.
Und Kato sein Code funktioniert nicht, das @'\' wird unterstrichen.
ich hätte da jetzt eine idee wie es funktionieren könnte, und zwar nimmt man "path" berechnet wieviele Zeichen dieser hat, und nimmt die Anzahl als Substring...
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| private void button5_Click(object sender, EventArgs e) { folderBrowserDialog1.ShowDialog(); string folderpath = folderBrowserDialog1.SelectedPath; textBox1.Text = folderpath; string path = folderpath; foreach (string mods in Directory.GetDirectories(path, "@*")) { int laenge = path.Length; checkedListBox1.Items.Add(Path.GetDirectoryName(mods).Substring(laenge)); } } |
Einziges Problem, ich bekomme NUR die Checkbox angezeigt ohne Label.. wenn ich jetzt z.B. "int laenge = path.Length -5; nutze zeigt er mir Nur die Zeichen vor dem @ an oO also quasi "rmA\"
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 02.07.09 20:59
epinephrine87 hat folgendes geschrieben : | Hmm mit Substring wäre eine Gute Idee doch der Pfad ist immer unterschiedlich, denn nicht jeder Spieler hat das Spiel auf dem Selben Pfad Installiert, ansonsten hätte ich ja sogut wie garkeine probleme damit gehabt. |
Was hat das damit zu tun?
Der Code nimmt den letzten Teil des Pfades und davon den Teil des Strings ab den zweiten Zeichen...
Habs grad getestet, klappt problemlos.
|
|
epinephrine87 
      
Beiträge: 17
Windows Vista Ultimate x64
C# (Visual Studio Express 08)
|
Verfasst: Do 02.07.09 23:05
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 02.07.09 23:13
Was steht denn bei dir in mods drin? Ist da am Ende ein Backslash dran?
Wenn nein: Hast du sicher GetFileName benutzt?
Bei mir ist in mods am Ende kein Pfadtrennzeichen und dann funktioniert es problemlos. 
|
|
epinephrine87 
      
Beiträge: 17
Windows Vista Ultimate x64
C# (Visual Studio Express 08)
|
Verfasst: Do 02.07.09 23:45
|
|