2012-02-22 4 views
0

У меня есть приведенный ниже код, и по какой-то причине функция 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); 
+0

Пробовал ли вы печатать имена файлов прямо перед 'переименованием'? – cnicutar

+0

В настоящее время я отлаживаю, а при зависании над ними fname = log.csv и fname_string - log_1234.csv Аналогичный вопрос здесь [ссылка] (http://stackoverflow.com/questions/4512256/win32-api -for-rename-a-file-in-c), что я могу посмотреть в – NickG

+0

Вы должны ** только ** проверить errno, если rename() возвращает -1. – wildplasser

ответ

0

Мой последний комментарий выше отвечает на этот вопрос/вопрос.

Смежные вопросы