mit DirectoryListBox in neu erstelltes Verzeichnis wechseln (war: DirectoryListbox)



  • Hallo,

    möchte nach anlegen eines Verzeichnis in der DirectoryListbox, direkt in das neu erstellte Verzeichnis gehen.
    Verzeichnis wird wunderbar erstellt und die DirectoryListbox wird auch aktualisiert. Jedoch wird das neue Verzeichnis in der DirectoryListbox nicht
    geöffnet

    komme hier nicht weiter.

    void __fastcall TOption::btnSheet2VerzeichnisBestaetigenClick(TObject *Sender)
    //
    //
    //      erstell am:     03. Mai 2005
    //      geändert am:    03. Mai 2005
    //
    //
    {
    //
    int stat;
    AnsiString NewDir = editVerzeichnisSheet2->Text;
    char old_dir[MAXDIR];
    char new_dir[MAXDIR];
    AnsiString myOldDir;
    AnsiString myNewDir;
    AnsiString myAktuellDir;
    //
          btnSheet2VerzeichnisBestaetigen->Visible = false;
          btnSheet2VerzeichnisBestaetigen->Refresh();
    //
          char *ch1 = new char[NewDir.Length() + 1];
          strcpy(ch1, NewDir.c_str());
          stat = mkdir(ch1);
          delete [] ch1;
    //
            if (!stat)
              {
              if (getcurdir(0, old_dir))
                {
                perror("getcurdir()");
                return ;
                }
              myOldDir = ("\\%s\n", old_dir);
                if (chdir("\\"))
                  {
                  perror("chdir()");
                  return ;
                   }
              myNewDir = myOldDir + "\\" + NewDir;
              char *ch2 = new char[myNewDir.Length() + 1];
              strcpy(ch2, myNewDir.c_str());
              chdir (ch2);
              delete [] ch2;
    //
                if (getcurdir(0, new_dir))
                  {
                  perror("getcurdir()");
                  return ;
                  }
    //
              myAktuellDir = ("\\%s\n", new_dir);
    //
              dcbSheet2->Update();
              dlbSheet2->Update();
              flbSheet2->Update();
              dlbSheet2->FileList = flbSheet2;
              dcbSheet2->DirList = dlbSheet2;
              flbSheet2->ApplyFilePath("*.XD");
              dcbSheet2->Refresh();
              dlbSheet2->Refresh();
              flbSheet2->Refresh();
    //
    memoSheet2Ergebnis->Clear();
    memoSheet2Ergebnis->Text = myAktuellDir;
              }
            else
              {
              return ;
              }
    //
          cbVerzeichnisSheet2->Checked = false;
    //
    //
    }
    //---------------------------------------------------------------------------
    

    Gruß Siegfried

    😞

    Edit:
    Bitte aussagekräftige Überschriften wählen. Danke!



  • Beppo schrieb:

    Jedoch wird das neue Verzeichnis in der DirectoryListbox nicht
    geöffnet

    Warum auch, etwa wegen deines chdir? Du muss der DirectoryListbox schon sagen, was für sie das aktuelle Verzeichnis sein soll. So in etwa:

    DirectoryListBox1->Directory = myNewDir;
    


  • Hallo,

    klappt leider nicht.

    trorz korektem Weg ->> DirectoryListBox1->Directory = myNewDir <-- bleibt die Ansicht auf dem letztem Verzeichnis stehen.
    Mit Debug verfolgt.

    Gruß Siegfried



  • Hallo,

    habe endlich mein Problem gelößt. Der Fehler bestand darin, das ich der DirectoryListBox->Directory, den komplette Path übergeben habe. Dieses darf aber nicht aus meinen Erfahrungen nicht sein. (siehe Sourcecode) Ich habe jetzt nur noch den Namen des neu erstellten Verzeichnis mitgegeben. Dieses funktioniert jetzt, so wie ich es wollte.

    void __fastcall TOption::btnSheet2VerzeichnisBestaetigenClick(TObject *Sender)
    //
    //
    //      erstell am:     03. Mai 2005
    //      geändert am:    04. Mai 2005
    //
    //
    {
    //
    int stat;
    AnsiString myNewDir = editVerzeichnisSheet2->Text;
    char old_dir[MAXDIR];
    char new_dir[MAXDIR];
    //
          btnSheet2VerzeichnisBestaetigen->Visible = false;
          btnSheet2VerzeichnisBestaetigen->Refresh();
    //
    //      neues Verzeichnis erstellen
          char *ch1 = new char[myNewDir.Length() + 1];
          strcpy(ch1, myNewDir.c_str());
          stat = mkdir(ch1);
          delete [] ch1;
    //
    //      ist Verzeichnis erstellt worden ?
            if (!stat)
              {
    //
    //      neues Verzeichnis öffnen
              dlbSheet2->Directory  = myNewDir;       //    hier war der Fehler
    //
    //      ist neues Verzeichnis geöffnet worden ?
              if (getcurdir(0, new_dir))
                {
    //
    //      das Verzeichnis konnte nicht geöffnet werden
                Application->NormalizeTopMosts();
                Application->MessageBox("das Verzeichnis konnte nicht geöffnet werden",
                                        "Verzeichnis nicht geöffnet !!!",
                                        MB_OK);
                Application->RestoreTopMosts();
                return ;
                }
    //
    //      DirectoryListBox und FileListBox aktualisieren
              dlbSheet2->Update();
              flbSheet2->Update();
    //
              }
            else
              {
    //
    //      das Verzeichnis konnte nicht erstellt werden
              Application->NormalizeTopMosts();
              Application->MessageBox("das Verzeichnis konnte nicht erstellt werden",
                                      "Verzeichnis existiert !!!",
                                      MB_OK);
              Application->RestoreTopMosts();
              return ;
              }
    //
          cbVerzeichnisSheet2->Checked = false;
    //
    //      kompletter Path in Memo listen
          OrdnerTimer->Interval = 50;
          OrdnerTimer->Enabled = true;
    //
        return;
    //
    //
    //
    }
    //---------------------------------------------------------------------------
    

    Gruß Siegfried

    😉
    :live



  • Beppo schrieb:

    HDer Fehler bestand darin, das ich der DirectoryListBox->Directory, den komplette Path übergeben habe.

    Selbstverständlich kann man der Directory-Eigenschaft einen kompletten Pfad zuweisen und so z.B. direkt zwischen Verzeichnissen auf verschiedenen Laufwerken wechseln o.ä.



  • Hallo,

    dieses hat bei mir nicht funktioniert. Warum weiß ich nicht.

    trotzdem für deine Hilfe, vielen Dank.

    Gruß Siegfied

    👍



  • Vermutlich war der von dir übergebene Pfad nicht korrekt, evtl. durch Probleme mit dem getcurrentdir.
    Sich auf das Arbeitsverzeichnis zu verlassen wird wird dir mit ziemlicher Sicherheit mal auf die Füsse fallen, spätestens dann, wenn der User das durch Ausführen eines OpenDialog o.ä. mal eben hinter deinem Rücken umbiegt.
    Empfehlenswert ist statt dessen immer die vVerwendung kompletter, quasi-absoluter Pfade, die sich auf einen stets garantierten Anfangspunkt beziehen, wie z.B. das über Application->ExeName ermittelte Programmverzeichnis.



  • Hallo,

    guter Tip, ->Application->ExeName<-

    aber was ist, wenn ich in einem neu erstelltem Verzeichnis wieder ein Verzeichnis erstellen möcht ?

    Gruß Siegfried


Anmelden zum Antworten