Kopieren von ganzen Ordnern



  • Hallo,
    nach langem Probieren ist es mir gelungen einzelne gewünschte Dateien auf z.B. A: zu kopieren. Diese Dateien mussten aber zuvor in einer Datenbank benannt werden. D. h. : ich las die Datenbank über count und FieldbyName aus (Anzahl, Name) und ließ über Next die Schleife so oft durchlaufen, bis alles kopiert war. Dies ist mir mittlerweile zu umständlich. Ich möchte ganz einfach den ganzen Ordner kopieren.
    Aber wie ?????

    Hier mein bisheriger Code:

    DataModule1->OptioDatQuery->First();
          {
          if (iSatzanzahl >0)
    
            for (int i =ProgressBar1->Min; i <= ProgressBar1->Max; i++)//for (int i =0, i < iSatzanzahl; i++)
            {
    
            asField = DataModule1->OptioDatQuery->Fields->FieldByName("Dateinamen")->AsString;
    
            //----------------------------------------------------------------------
            /*Dateigröße auslesen,
              Speicherplatz auf ausgewähltem Ziellaufwerk auslesen,
              Routine Ziellaufwerksspeicherplatz > Dateigröße,
              wenn ja dann kopieren,
              wenn nein Aufforderung neue Disk einlegen,*/
    
            //Freier Platz auf Laufwerk auslesen Angabe in Byte
            __int64 AmtFree = DiskFree(1);
            __int64 Total = DiskSize(1);
            int FreierPlatz;
            int FreiTotal;
            FreierPlatz = AmtFree;
            FreiTotal = Total;
            //Label5->Caption = IntToStr(AmtFree);
            //Label5->Refresh();
            MainForm->StatusBar1 ->Panels->Items[4]-> Text = "Freier Speicherplatz " + IntToStr(AmtFree);
            MainForm->StatusBar1->Refresh();
    
            //Dateigröße auslesen in Byte
            int handle;
            int DateiGroesse;
    
            Query1->Open();
    
            AnsiString PfadName;
            Quelle = DBEdit1->Text;
            PfadName = Quelle + asField;
            char *ch1 = new char [PfadName.Length() + 1];
            strcpy(ch1, PfadName.c_str());
            handle = open(ch1, O_CREAT);
            delete [] ch1;
            DateiGroesse = filelength(handle);
            //Label6->Caption =  IntToStr(filelength(handle));
            //Label6->Refresh();
            MainForm->StatusBar1 ->Panels->Items[5]-> Text = "Dateigröße " + IntToStr(filelength(handle));
            MainForm->StatusBar1->Refresh();
    
            close(handle);
    
            if (DateiGroesse > AmtFree)
                    {
                    //Infomeldung
                    Application->NormalizeTopMosts();
                    Application->MessageBox("Bitte legen Sie in Ihr Diskettenlaufwerk eine Diskette mit der Aufschrift,,NB Sicherung Disk 2, ein.", "NB Sicherungsinfo", MB_OK);
                    Application->RestoreTopMosts();
                    }
    
            if (DateiGroesse > Total)
                    {
                    //Infomeldung
                    Application->NormalizeTopMosts();
                    Application->MessageBox("Die Speicherkapazität Ihres gewählten Sicherungslaufwerkes ist kleiner als Ihre zu sichernde Datei. Starten Sie bei Bedarf Ihre Anwendung neu und ändern Sie bitte Ihre Optionen oder Sichern Ihre Daten Manuell:", "NB Sicherungsinfo", MB_OK);
                    Application->RestoreTopMosts();
                    MainForm->ToolBar2->Visible = true;
                    int status;
                    exit(status - '0');
                    }
    
            //----------------------------------------------------------------------
            ProgressBar1->Position = i;//Zeile wurde hinzugefügt
    
            Edit1->Text = "Kopieren von " + asField + " nach " + Ziel;
            Edit1->Refresh();
    
            DataModule1->OptioDatQuery->Next();
    
      AnsiString NewFileName = Ziel + asField;//Datei; //Weg des Ziels
    
      {
    
        TFileStream *OldFile = new TFileStream(Quelle + asField, fmOpenRead);//Datei, fmOpenRead);
    
        try
        {
          TFileStream *NewFile = new TFileStream(NewFileName, fmCreate);
          try
          {
    
            NewFile->CopyFrom(OldFile, OldFile->Size);
    
          }
    
          __finally
          {
    
          }
          delete NewFile;
        }
        __finally
        {
    
        }
    
      delete OldFile;
    
      }
      FreiTotal = FreiTotal;
      FreierPlatz = FreierPlatz;
      }
    


  • Hallo

    Stichwort ist SHFileOperation, zum Beispiel wie hier im diesem Thread erwähnt.

    bis bald
    akari



  • Hallo,
    werds versuchen
    Danke Dir

    mfg


Anmelden zum Antworten