Как мы можем проверить, существует ли файл или нет с помощью программы Win32? - PullRequest
65 голосов
/ 30 сентября 2010

Как мы можем проверить, существует ли файл или нет с помощью программы Win32? Я работаю в приложении для Windows Mobile.

Ответы [ 7 ]

188 голосов
/ 02 июня 2011

Используйте GetFileAttributes, чтобы проверить, что объект файловой системы существует и не является каталогом.

BOOL FileExists(LPCTSTR szPath)
{
  DWORD dwAttrib = GetFileAttributes(szPath);

  return (dwAttrib != INVALID_FILE_ATTRIBUTES && 
         !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
}

Скопировано из Как проверить, существует ли каталог в Windows в C?

32 голосов
/ 30 сентября 2010

Вы можете использовать функцию GetFileAttributes. Возвращает 0xFFFFFFFF, если файл не существует.

22 голосов
/ 30 сентября 2010

Вы можете позвонить FindFirstFile.

Вот пример, который я только что выбил:

#include <windows.h>
#include <tchar.h>
#include <stdio.h>

int fileExists(TCHAR * file)
{
   WIN32_FIND_DATA FindFileData;
   HANDLE handle = FindFirstFile(file, &FindFileData) ;
   int found = handle != INVALID_HANDLE_VALUE;
   if(found) 
   {
       //FindClose(&handle); this will crash
       FindClose(handle);
   }
   return found;
}

void _tmain(int argc, TCHAR *argv[])
{
   if( argc != 2 )
   {
      _tprintf(TEXT("Usage: %s [target_file]\n"), argv[0]);
      return;
   }

   _tprintf (TEXT("Looking for file is %s\n"), argv[1]);

   if (fileExists(argv[1])) 
   {
      _tprintf (TEXT("File %s exists\n"), argv[1]);
   } 
   else 
   {
      _tprintf (TEXT("File %s doesn't exist\n"), argv[1]);
   }
}
16 голосов
/ 18 января 2015

Как насчет просто:

#include <io.h>
if(_access(path, 0) == 0)
    ...   // file exists
7 голосов
/ 20 декабря 2012

Другой вариант: 'PathFileExists' .

Но я бы, наверное, выбрал GetFileAttributes.

1 голос
/ 17 июля 2012

Вы можете попробовать открыть файл. Если это не удалось, значит, не существует в большинстве случаев.

0 голосов
/ 24 октября 2014

Еще один более общий способ, отличный от Windows:

static bool FileExists(const char *path)
{
    FILE *fp;
    fpos_t fsize = 0;

    if ( !fopen_s(&fp, path, "r") )
    {
        fseek(fp, 0, SEEK_END);
        fgetpos(fp, &fsize);
        fclose(fp);
    }

    return fsize > 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...