У меня есть приведенный ниже код, и по какой-то причине функция rename(..)
не работает. Я попытался предоставить полный путь, а также изменить рабочий каталог, а затем предоставить только имена файлов. Ниже приведена последняя, которая не удалась и errno
- 13
. Все файлы находятся в папке «Проекты» этого проекта консоли win32. Я не понимаю, почему так сложно просто изменить имя файла, независимо от того, что текущий рабочий каталог.Переименовать файл в C Visual Studio 2008
//fname_string* points to beginning of actual filename
//filename contains entire output file path
//file_ext* points to .csv portion
//fname will get old filename
fname_string = strrchr(filename, '\\');
if(fname_string == NULL)
{
fname_string = filename; //no dir supplied, so set it to filename
}
else
{
strncpy(fname, filename, fname_string - filename);
fname[fname_string-filename] = '\0';
chdir(fname);
fname_string++; //now points to filename
read_success = errno; //this succeeds supposedly
}
strcpy(fname, fname_string); //save old file path
sprintf(file_ext, "_%d.csv", append_esn); //append_esn = 1234
read_success = rename(fname, fname_string);
read_success = errno; //giving me 13
EDIT: я тупой, и я закрывал файл «вход», а не файл «выход». Так что FYI, файл лучше быть закрытым! Причина, по которой я думал, что она была закрыта, связана с тем, что я очищаю выходной файл, а иногда он не имеет файла нулевого размера.
Таким образом, переименование может проходить полный путь или только имена файлов, если их в рабочем каталоге ... Там идет два часа бессмыслицы .... Таким образом, вышеизложенное будет работать или просто делать ниже, предполагая, что те же указатели упомянуты выше:
strcpy(fname, filename); //save old file path
sprintf(file_ext, "_%d.csv", append_esn);
read_success = rename(fname, filename);
Пробовал ли вы печатать имена файлов прямо перед 'переименованием'? – cnicutar
В настоящее время я отлаживаю, а при зависании над ними fname = log.csv и fname_string - log_1234.csv Аналогичный вопрос здесь [ссылка] (http://stackoverflow.com/questions/4512256/win32-api -for-rename-a-file-in-c), что я могу посмотреть в – NickG
Вы должны ** только ** проверить errno, если rename() возвращает -1. – wildplasser