Как переименовать файл с «неизвестным» именем в C ++? - PullRequest
0 голосов
/ 17 февраля 2019

ВМ создает файл, а .vbs получает его каталог и имя.Просто проверяя наличие файлов .m4a в каталоге.(есть только один за раз), и я хотел бы переименовать файл, он говорит, что такого файла или каталога не существует.

   ifstream infile;
   infile.open("A:\\Spotify\\Sidifyindex\\indexchecker.txt");

В файле написано "Z: \ Spotify \ Sidify testout \ 01 VVS.m4a "

   getline(infile, VMin);
   infile >> VMin;
   infile.close();
   //clear drive letter
   VMin.erase(0, 1);
   //add new drive letter
   VMin = "A" + VMin;
   //copy file dir
   string outpath;
   outpath = VMin;

   //get new file name
   outpath.erase(0, 30);
   outpath = "A:\\Spotify\\Sidify test out\\" + outpath;
   //convert to const char*
   const char * c = VMin.c_str();
   const char * d = outpath.c_str();

   //rename
   int result;
   char oldname[] = "VMin.c_str()";
   char newname[] = "outpath.c_str()";
   result = rename(oldname, newname);
   if (result == 0)
     puts("File successfully renamed");
    else
        perror("Error renaming file");

    cout << VMin << endl;
    cout << outpath << endl;

Я получаю сообщение" Ошибка оставшегося файла: нет такого файла или каталога "Вывод правильный" A: \ Spotify \ Sidify test out \ 01 VVS.m4a "и«A: \ Spotify \ Sidify test out \ VVS.m4a»

Я предполагаю, что проблема скрыта где-то в части переименования

1 Ответ

0 голосов
/ 17 февраля 2019

Вы писали:

char oldname[] = "VMin.c_str()";
char newname[] = "outpath.c_str()";

, но вы, вероятно, хотели это сделать:

char oldname* = VMin.c_str();
char newname* = outpath.c_str();

Первый вариант будет искать файл с именем "VMin.c_str ()", которыйне существует и, таким образом, вы получаете эту ошибку.Вы случайно поместили код C ++ в кавычки.Кавычки предназначены только для дословных строк, таких как сообщения и фиксированные имена файлов.Но ваши имена файлов определяются программно.

Вы можете использовать const char * c и d, которые вы вычислили выше, и передать их rename().

...