Win32 API для переименования файла в C - PullRequest
7 голосов
/ 22 декабря 2010

Если исходный каталог и целевой каталог, MoveFile фактически сделает копию исходного файла в целевой файл, что означает, что я в конечном итоге увижу два файла.

Это лучший способ переименования?

Ответы [ 4 ]

9 голосов
/ 22 декабря 2010

Функция MoveFile - это действительно то, что вам нужно.Из документации:

Функция MoveFile будет перемещать (переименовывать) либо файл, либо каталог (включая его дочерние элементы) либо в тот же каталог, либо в другие каталоги.

Если местоположения источника и назначения находятся на одном и том же томе, выполняется операция атомарного переименования.Если они находятся на разных томах, вместо этого выполняется операция копирования / удаления (это лучшее, что вы можете сделать).

4 голосов
/ 22 декабря 2010

Попробуйте

#include <stdio.h>

int Result = rename( oldname , newname );

if (Result)
   // "Error occurred." );
else
   // "File was successfully renamed!";
1 голос
/ 22 декабря 2010

Возможно, вы захотите попробовать использовать MoveFileEx() API без указания MOVEFILE_COPY_ALLOWED, чтобы посмотреть, обеспечивает ли это требуемое поведение.

1 голос
/ 22 декабря 2010

Как выглядит ваш код? У меня есть это:

if(MoveFile(_T("c:\\hold\\source"),_T("c:\\hold\\dest")))
{
    printf("succeeded\n");
}else
{
    printf("Error %d\n",GetLastError());
}

и это не оставляет источника позади.

...