Я не знаю, как вы собираетесь проверить, существует ли файл, не проверяя, существует ли файл, но, надеюсь, эта функция поможет вам:
#include <sys/stat.h>
if (!fileExists("foo")) { /* foo does not exist */ }
int fileExists (const char *fn)
{
struct stat buf;
int i = stat(fn, &buf);
if (i == 0)
return 1; /* file found */
return 0;
}
Если ваша цель - сохранить код в чистоте, просто используйте функции:
int main()
{
if (! renameFiles("fileA", "fileB")) {
fprintf(stderr, "rename failed...\n");
exit EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
int renameFiles(const char *source, const char *destination)
{
int result = -1;
if ( (fileExists(source)) && (!fileExists(destination)) )
result = rename(source, destination);
if (result == 0)
return 1; /* rename succeeded */
/*
Either `source` does not exist, or `destination`
already exists, or there is some other error (take
a look at `errno` and handle appropriately)
*/
return 0;
}
Вы можете возвращать пользовательские коды ошибок из renameFiles()
и условно обрабатывать ошибки, основываясь на том, какой файл существует или не существует, или если есть какая-то другая проблема с вызовом rename()
.