Comment vérifier si un fichier existe ou non à l'aide d'un programme Win32 ? Je travaille pour une application Windows Mobile.
+1 à cause d'un court exemple de code. Les exemples de code sont un gain de temps pour commencer.
Comment vérifier si un fichier existe ou non à l'aide d'un programme Win32 ? Je travaille pour une application Windows Mobile.
Utilisez GetFileAttributes
pour vérifier que l'objet système de fichiers existe et qu'il ne s'agit pas d'un répertoire.
BOOL FileExists(LPCTSTR szPath)
{
DWORD dwAttrib = GetFileAttributes(szPath);
return (dwAttrib != INVALID_FILE_ATTRIBUTES &&
!(dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
}
Copié de Comment vérifier si un répertoire existe sous Windows en C ?
+1 à cause d'un court exemple de code. Les exemples de code sont un gain de temps pour commencer.
Vous pouvez utiliser la fonction GetFileAttributes
. Il retourne 0xFFFFFFFF
si le fichier n'existe pas.
Histoire intéressante sur GetFileAttributes et pourquoi c'est la méthode préférée dans le code Windows par Raymond Chen : blogs.msdn.com/b/oldnewthing/archive/2007/23/10/5612082.aspx
En fait, il renvoie INVALID_FILE_ATTRIBUTES
si le fichier n'existe pas. Sur 64 bits, cela pourrait être 0xFFFFFFFFFFFFFFFF
.
Vous pouvez appeler FindFirstFile
.
Voici un échantillon que je viens de créer :
#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]);
}
}
Vous avez oublié d'appeler FindClose
. Et vous ne pouvez pas retourner une valeur à partir d'une fonction vide.
Voir les autres réponses pour de meilleures façons de procéder. En outre, le code ne sera même pas compilé tel quel en raison de l'utilisation d'argv[1] dans fileExists() ;
Une autre option : PathFileExists .
Mais je choisirais probablement GetFileAttributes
.
En outre PathFileExists
nécessite l'utilisation de "Shlwapi.dll" (qui n'est pas disponible sur certaines versions de Windows) et est légèrement plus lent que la méthode suivante GetFileAttributes
.
L'ouverture d'un fichier peut également échouer si le fichier existe mais que l'utilisateur ne dispose pas des privilèges suffisants pour l'ouvrir. De nos jours, c'est un très situation commune.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
3 votes
Std::filesystem::exists() à partir de C++17