Announcement

Collapse
No announcement yet.

OpenFileDialog Frage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • OpenFileDialog Frage

    Moin,

    Ich hab mal ne (Anfänger-)Frage und zwar wie bekomme ich es hin, dass ich beim openFileDialog.FileName NUR den Dateinamen bekomme, anstatt den ganzen Pfad inklusive.

    Normalerweise sieht der string ja zb so aus: "C:\Programme ...etc... neu.txt"
    Ich will aber nur den Dateinamen "neu.txt" als string haben, wie bekomme ich das hin ???

    Danke im voraus !
    www.pfw.de.ki

  • #2
    Hi,

    Code:
    Path.GetFileName( ... )
    Als Hilfe auf solche und ähnliche Frage kann ich Dir noch das hier empfehlen - bzw. die SDK Hilfe.

    HTH,
    Karsten

    Comment


    • #3
      Folgende Lösung hätte ich:

      sVerzeichnis = openFileDialog1.FileName.Substring(0, openFileDialog1.FileName.LastIndexOf("\\"));

      Gruß
      Marco

      Comment


      • #4
        Habe zum openFileDialog auch noch eine Frage.

        In meinem C#-Programm hat der Anwender die Möglichkeit einen Verzeichnispfad zu einer bestimmten Anwendung auszuwählen, was ich über den openFileDialog löse. Bestätigt der Anwender das gewählte Verzeichnis, so wird eine Ini-Datei im Ausführungsverzeichnis geschrieben. Dies funktioniert unter Windows Vista problemlos. Führe ich das Assembly allerdings unter Windows XP aus, wird keine Ini-Datei geschrieben. Es gibt auch keine Fehlermeldung. Das Verzeichnis hat keinen Schreibschutz!

        Ich entwickel auf Basis des dot.net Frameworks 3.5 unter VS2008 Prof.
        Selbst wenn ich das Assembly direkt auf WinXP kompiliere funktioniert dies nicht.

        Hat jemand eine Idee?

        Gruß
        Marco

        Comment


        • #5
          @Marco #3
          Bitte genau lesen: Skip hat nach dem eigentlichen Dateinamen gefragt, nicht nach dem Verzeichnis. Deine Lösung ist also falsch, sondern darf den Substring erst nach dem letzten '\' anfangen lassen.

          Aber warum willst Du solche langen Terme selbst schreiben und genau auf die Grenzwerte achten, wenn es eine fertige Lösung gibt, wie Rumtata angibt?

          In der SDK-Doku gibt es bei den Klassen File, Path, Directory viele statische Methoden für Dateien und Verzeichnisse; die Klassen FileInfo, DirectoryInfo bieten Informationen für eine einzelne Datei bzw. Verzeichnis. Die Lektüre der SDK-Doku liefert sehr oft und sehr schnell ein passendes Verfahren.

          Merke: Die SDK-Doku ist das wichtigste Hilfsmittel, wichtiger als alle Foren! Jürgen

          Nachtrag zu Marko #4
          Du kannst einen Beitrag "Editieren" und musst nicht nach einer Viertelstunde einen weiteren schreiben. Zu dieser Frage kann ich nichts sagen, weil Du nichts schreibst (keinen Code), wie Du die ini-Datei speichern willst; und meine Glaskugel ist gerade kaputt.

          Comment


          • #6
            @Jürgen:

            Sorry, da habe ich nicht richtig gelesen gehabt. Es müsste dann wohl so richtig sein:

            Code:
            sDatei = openFileDialog1.FileName.Substring(openFileDialog1.FileName.LastIndexOf("\\"), openFileDialog1.FileName.Length - openFileDialog1.FileName.LastIndexOf("\\"));
            Ich gebe dir natürlich recht, dass man dies auch mit den schon vorhanden Bordmitteln einfacher lösen kann. Aber es spricht ja nichts dagegen auch andere Wege aufzuzeigen. Bekanntlich führen viele Wege nach Rom. Ob sie immer die einfachsten und schnellsten sind sei mal dahingestellt. Interessant sind sie alle mal.

            Das deine Glaskugel gerad kaputt ist bedaure ich sehr. Ich sah keinen Sinn darin Code für diese Frage zu posten.

            Die Datei wird folgendermaßen geschrieben:

            Code:
            StreamWriter writer = File.CreateText(sTestIni);
            writer.WriteLine("[Option]");
            writer.WriteLine("Path=" + sVerzeichnis);
            writer.close();
            Die Datei soll auf jeden Fall immer neugeschrieben, auch wenn sie schon existieren sollte wird sie einfach überschrieben. Das ist so ausdrücklich gewünscht. Damit keine Verwunderung aufkommt, es werden noch mehr Parameter in die Ini geschrieben als nur der Verzeichnispfad

            Das Schreiben der Datei wird über folgender Funktion ausgelöst:

            Code:
                    private void bt_HomeVerzeichnis_Click(object sender, EventArgs e)
                    {
                          ofdVerzeichnis.InitialDirectory = Application.StartupPath;
                          ofdVerzeichnis.Filter = "GLASKUGELRecycling (*.exe)|GlaskugelRecycling.exe"  +  
                                            "|Ausführbare Dateien (*.exe)|*.exe";
                          if (ofdVerzeichnis.ShowDialog() == DialogResult.OK)
                          {
                              algF.sVerzeichnis = ofdVerzeichnis.FileName;
                              algFunctions.DatenSchreiben();              
                          }
            Gruß
            Marco
            Zuletzt editiert von Marco E.; 20.05.2008, 10:57.

            Comment


            • #7
              Okay...nur mal als Idee (kann es leider momentan nicht ausprobieren). Die Verwendung des Ereignisses FileOk des openFileDialogs sollte hier Abhilfe schaffen. Anscheinend reicht die einfache Abfrage "if (ofdVerzeichnis.ShowDialog() == DialogResult.OK)" nicht aus.

              Code:
                      private void button1_Click(object sender, EventArgs e)
                      {
                          openFileDialog1.InitialDirectory = Application.StartupPath;
                          openFileDialog1.Filter = "GLASKUGELRecycling (*.exe)|GlaskugelRecycling.exe"  +  
                                              "|Ausführbare Dateien (*.exe)|*.exe";
                          openFileDialog1.ShowDialog();
                      }
              
                      private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
                      {
                                algF.sVerzeichnis = ofdVerzeichnis.FileName;
                                algFunctions.DatenSchreiben();    
                      }
              Gruß
              Marco

              Comment


              • #8
                Lösung:

                Unter WinXP wird durch die Auswahl eines Verzeichnisses über den openDirectoryDialog der Arbeitspfad des laufenden Programms überschrieben. Dies geschieht unter Vista scheinbar nicht! Es ist also ratsam, bei Programmausführung den Arbeitspfad (Directory.GetCurrentDirectory().ToString()) in einer Variable abzulegen, um auf diesen später zurückgreifen zu können.

                Gruß
                Marco

                Comment

                Working...
                X