MoveFileEx - Funktioniert nicht



  • Hallo ich habe mir ein Funktion zusammen gebastelt, mit dem ich ein Verzeichnis nach Dateien durchsuche. Soweit funktioniert das auch. Nun will ich die Dateien im Verzeichnis in ein Archiv-Verzeichnis verschieben.
    Leider funktiniert das verschieben nicht.

    void TForm1::FindData(AnsiString pfad)
    {
    TSearchRec sr;
    pfad += "\\";
    
    ListBox1->Clear();
    if (FindFirst(pfad + "*", faAnyFile, sr) == 0)//fAnyFile:jede Datei wird gesucht
      {
      do
        {
        if ((sr.Name != ".")&&(sr.Name != ".."))
          {
          if (sr.Attr != faDirectory) //wenn das Attr. kein Ordner ist
            {
            MoveFileEx(pfad + sr.Name,"C:\\test\\Archiv\\Testdatei_1.txt", MOVEFILE_REPLACE_EXISTING | MOVEFILE_COPY_ALLOWED);
            }
          }
        }
        while (FindNext(sr) == 0);
        FindClose(sr);
      }
    }
    

    Das Problem liegt in:

    MoveFileEx(pfad + sr.Name
    

    Fehlermeldung:
    Cannot convert 'AnsiString' to 'const char *'
    Type mismatch in parameter 'lpExistingFileName' (wanted 'const char *', got 'AnsiString')

    Nun habe ich folgendes Versucht:

    MoveFileEx((pfad + sr.Name).c_str,"C:\\test\\Archiv\\Testdatei_1.txt",
    Fehlermeldung:
    MOVEFILE_REPLACE_EXISTING | MOVEFILE_COPY_ALLOWED);
    

    Cannot convert 'char * (_fastcall * (_closure )())()' to 'const char *'
    Type mismatch in parameter 'lpExistingFileName' (wanted 'const char *', got 'void')

    Dann habe ich folgendes versucht:

    pfad += sr.Name;
    MoveFileEx(pfad.c_str,"C:\\test\\Archiv\\Testdatei_1.txt", MOVEFILE_REPLACE_EXISTING | MOVEFILE_COPY_ALLOWED);
    

    Fehlermeldung:
    Cannot convert 'char * (_fastcall * (_closure )())()' to 'const char *'
    Type mismatch in parameter 'lpExistingFileName' (wanted 'const char *', got 'void')

    Das sind ein paar meiner Versuche gewesen.
    Ich weiß einfach nicht mehr weiter.
    Ich verstehe die Fehlermeldung auch nicht ganz.
    Liegt anscheint an const char, aber das sagt mir wenig.
    Was mache ich blos falsch.



  • soweit ich das sehe 🙂
    ist pfad ein AnsiString muss aber const char sein also

    const char *pfad;  //bzw void TForm1::FindData(const char *pfad)
    

    😉

    (denke ich mal )

    gruß Multi



  • MoveFileEx((const char *)pfad.c_str(), ...);
    


  • naja oder so wie Jansen 🙂 (was besser ist als meine lösung 😉 )



  • Super Danke!
    Mein Tag ist gerettet.



  • Entschuldigung Jansen, aber was soll das? c_str() liefert schon einen const char*. Er hatte bei c_str lediglich die Klammern vergessen. Es ist halt eine Funktion.

    MoveFileEx(pfad.c_str(),"C:\\test\\Archiv\\Testdatei_1.txt", MOVEFILE_REPLACE_EXISTING | MOVEFILE_COPY_ALLOWED);
    


  • Braunstein schrieb:

    Er hatte bei c_str lediglich die Klammern vergessen.

    Das stimmt natürlich, da hatte ich Tomaten auf den Augen. 🙂


Anmelden zum Antworten