Comment vérifier si le fichier existe dans une application Windows Store?

Existe-t-il un autre moyen de vérifier si un fichier existe dans une application Windows Store?

try { var file = await ApplicationData.Current.LocalFolder.GetFileAsync("Test.xml"); //no exception means file exists } catch (FileNotFoundException ex) { //find out through exception } 

Selon la réponse acceptée dans cet article , il n’y a pas d’autre moyen pour le moment. Cependant, l’équipe File IO envisage de modifier l’API pour qu’elle retourne null au lieu de lancer une exception.

Citation du post lié:

Actuellement, le seul moyen de vérifier si un fichier existe est de récupérer l’exception FileNotFoundException. Comme cela a été souligné, une vérification explicite et l’ouverture est une condition de concurrence et en tant que telle, je ne m’attends pas à ce qu’il y ait un fichier existant. Des API ont été ajoutées. Je crois que l’équipe File IO (je ne suis pas dans cette équipe, donc je ne sais pas avec certitude, mais c’est ce que j’ai entendu) envisage de rendre cette API nulle au lieu de lancer si le fichier n’existe pas.

Cela peut être vieux, mais on dirait qu’ils ont changé la façon dont ils veulent que vous abordiez cela.

Vous êtes censé tenter de créer le fichier, puis redescendre si le fichier existe déjà. Voici la documentation à ce sujet. Je le mets à jour car c’est le premier résultat de ma recherche Google sur ce problème.

Donc, dans mon cas, je veux ouvrir un fichier ou le créer s’il n’existe pas. Ce que je fais, c’est créer un fichier et l’ouvrir s’il existe déjà. Ainsi:

 save = await dir.CreateFileAsync(myFile, CreationCollisionOption.OpenIfExists); 

Je suis tombé sur cet article de Shashank Yerramilli qui fournit une bien meilleure réponse.

J’ai testé cela pour Windows Phone 8 et ça marche. Je ne l’ai pas testé sur Windows Store

Je copie la réponse ici

Pour l’application Windows RT:

 public async Task isFilePresent(ssortingng fileName) { var item = await ApplicationData.Current.LocalFolder.TryGetItemAsync(fileName); return item != null; } 

Pour Windows Phone 8

  public bool IsFilePresent(ssortingng fileName) { return System.IO.File.Exists(ssortingng.Format(@"{0}\{1}", ApplicationData.Current.LocalFolder.Path, fileName); } 

Vérifier si un fichier existe dans Windows Phone 8 et WinRT sans exception

Vous pouvez utiliser l’ancien appel Win32 comme ceci pour tester si le répertoire existe ou non:

 GetFileAtsortingbutesExW(path, GetFileExInfoStandard, &info); return (info.dwFileAtsortingbutes & FILE_ATTRIBUTE_DIRECTORY) ? false: true; 

Il fonctionne dans les applications Desktop et Metro: http://msdn.microsoft.com/en-us/library/windows/desktop/aa364946%28v=vs.85%29.aspx

Microsoft a ajouté une nouvelle fonction à StorageFile dans Windows 8.1 pour permettre aux ingénieurs utilisateurs de déterminer si un fichier est accessible: IsAvailable

L’autre moyen de vérifier est d’obtenir des fichiers dans le dossier local

  var collection = ApplicationData.Current.LocalFolder.GetFilesAsync() 

En utilisant cette méthode, puis en parcourant tous les éléments de la collection et en vérifier la disponibilité.

J’ai essayé d’écrire mon propre en utilisant de vieux trucs:

  1. GetFileAtsortingbutesEx () semble toujours se retrouver avec ERROR_ACCESS_DENIED si le fichier sélectionné via FileOpenPicker;
  2. Idem pour FindFirstFileEx ();
  3. _stat () se termine toujours par ENOENT lorsque le fichier sélectionné via FileOpenPicker;
  4. CreateFile2 () avec l’option CREATE_NEW fonctionne – si le fichier existe, il échouera avec la valeur de retour INVALID_HANDLE_VALUE et la dernière erreur ERROR_FILE_EXISTS; Si le fichier n’existe pas, vous devez vous souvenir de supprimer le fichier créé par la suite.

Dans l’ensemble, vous êtes mieux de restr avec la méthode de traitement des exceptions.

8.1 eu quelque chose comme ça, j’ai essayé ça a fonctionné.

 var folder = ApplicationData.Current.LocalFolder; var file = await folder.TryGetItemAsync("mytext.txt") as IStorageFile; if (file == null) { //do what you want } else { //do what you want } 

http://marcominerva.wordpress.com/2013/11/19/how-to-check-if-a-file-exists-in-a-windows-8-1-store-apps-no-more-exception- manipulation/

  Dim myPath As StorageFolder If (From i In Await KnownFolders.MusicLibrary.GetFoldersAsync() Where i.Name = "PodBong").Count = 1 Then myPath = Await KnownFolders.MusicLibrary.GetFolderAsync("PodBong") Else myPath = Await KnownFolders.MusicLibrary.CreateFolderAsync("PodBong") End If 

La documentation de TryGetItemAsync indique: “Cet exemple montre comment vérifier l’existence d’un fichier.” Il semble que cette API soit officiellement destinée à cette fin.