Подтвердить что ты не робот

Как проверить, существует ли файл или нет с помощью программы Win32?

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

4b9b3361

Ответ 1

Вы можете вызвать 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]);
   }
}

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

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

#include <io.h>
if(_access(path, 0) == 0)
    ...   // file exists

Ответ 5

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

Но я бы, вероятно, пошел с GetFileAttributes.

Ответ 6

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

Ответ 7

Еще один универсальный способ без окон:

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;
}