Autor Beitrag
epinephrine87
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

Windows Vista Ultimate x64
C# (Visual Studio Express 08)
BeitragVerfasst: 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
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
            ///Deklaration "Path" im späteren Verlauf per Usereingabe.
            string path = "D:\\ArmA 2";
            ///Auflistung
            foreach (string mods in Directory.GetFiles(path));
            ///Mods ist unterstrichen?! oO
            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 user profile iconChristian S.: Code- durch C#-Tags ersetzt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 02.07.09 18:28 
Hallo und :welcome: !

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

Windows Vista Ultimate x64
C# (Visual Studio Express 08)
BeitragVerfasst: Do 02.07.09 18:34 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Hallo und :welcome: !

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. ;-)


Hey danke :) nun funktionier zumindest schonmal die ausgabe, nur wie gebe ich ihm jetzt den befehl er soll nur ordner anzeigen die mit @ beginnen, aber gleichzeitig in der ausgabe das @ rausfiltern?
Kato
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Do 02.07.09 18:58 
Hallo epinephrine87,

mit
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden 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. :D
// EDIT2:
Und :welcome: an user profile iconKato. :D


Zuletzt bearbeitet von jaenicke am Do 02.07.09 19:03, insgesamt 2-mal bearbeitet
Kato
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Do 02.07.09 18:59 
*edit* woops, verklickt oder so
epinephrine87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

Windows Vista Ultimate x64
C# (Visual Studio Express 08)
BeitragVerfasst: Do 02.07.09 19:04 
user profile iconKato hat folgendes geschrieben Zum zitierten Posting springen:
*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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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



BeitragVerfasst: Do 02.07.09 19:06 
um Ordner auszulefen versuch es mal mit

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
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
BeitragVerfasst: Do 02.07.09 19:10 
user profile iconepinephrine87 hat folgendes geschrieben Zum zitierten Posting springen:
... 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

Windows Vista Ultimate x64
C# (Visual Studio Express 08)
BeitragVerfasst: Do 02.07.09 19:28 
ausblenden 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
ausblenden Quelltext
1:
2:
if (mods[0] == "@")
  checkedListBox1.Items.Add(mods.SubString(1, mods.Length - 1));

und dem
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden C#-Quelltext
1:
2:
foreach (string mods in Directory.GetDirectories(path, "@*"))
    checkedListBox1.Items.Add(mods);
epinephrine87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

Windows Vista Ultimate x64
C# (Visual Studio Express 08)
BeitragVerfasst: Do 02.07.09 20:13 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe vergessen, dass GetDirectories den kompletten Pfad zurückliefert. Abgesehen davon muss man ja nicht selbst filtern, so sollte es klappen:
ausblenden C#-Quelltext
1:
2:
foreach (string mods in Directory.GetDirectories(path, "@*"))
    checkedListBox1.Items.Add(mods);


tatsache es funktioniert Danke :) jetzt währe nurnoch hilfreich wie ich das x:\pfad\@ entfernen kann.. also dass er mir in der Liste nurnoch anstatt x:pfad\@ordnername, ordnername anzeigt.
Kato
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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

ausblenden C#-Quelltext
1:
2:
string s = @"Das\ist\mein\Text";
string[] arr = s.Split(@'\');


Der inhalt von arr ist dann folgender
ausblenden C#-Quelltext
1:
2:
3:
4:
arr[0] = "Das";
arr[1] = "ist";
arr[2] = "mein";
arr[3] = "Text";
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 02.07.09 20:31 
Wie wäre es eher so:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

Windows Vista Ultimate x64
C# (Visual Studio Express 08)
BeitragVerfasst: Do 02.07.09 20:57 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Wie wäre es eher so:
ausblenden 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...
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 02.07.09 20:59 
user profile iconepinephrine87 hat folgendes geschrieben Zum zitierten Posting springen:
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? :gruebel:

Der Code nimmt den letzten Teil des Pfades und davon den Teil des Strings ab den zweiten Zeichen...
Habs grad getestet, klappt problemlos.
epinephrine87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

Windows Vista Ultimate x64
C# (Visual Studio Express 08)
BeitragVerfasst: Do 02.07.09 23:05 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconepinephrine87 hat folgendes geschrieben Zum zitierten Posting springen:
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? :gruebel:

Der Code nimmt den letzten Teil des Pfades und davon den Teil des Strings ab den zweiten Zeichen...
Habs grad getestet, klappt problemlos.




Also bei mir entfernt er nur den Laufwerksbuchstaben, mehr nicht..
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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. :nixweiss:
epinephrine87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

Windows Vista Ultimate x64
C# (Visual Studio Express 08)
BeitragVerfasst: Do 02.07.09 23:45 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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. :nixweiss:


Ahh es funktionier, ich trottel habe es wie folgt geschrieben:
ausblenden Quelltext
1:
2:
3:
4:
foreach (string mods in Directory.GetDirectories(path, "@*"))
{
checkedListBox1.Items.Add(Path.GetFileName(mods).Substring(1));
}


Also die Brackets hinzugefügt, habe sie nun entfernt und es geht einwandfrei :) Danke!
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.

Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.