Existe-t-il un autre moyen de vérifier si un fichier existe dans une application du 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 ce post , il n'y a pas d'autre moyen pour le moment. Cependant, l'équipe File IO envisage de changer l'API pour qu'elle renvoie null au lieu de lever une exception.
Citation du post lié:
Actuellement, la seule façon de vérifier si un fichier existe est d'attraper l'exception FileNotFoundException. Comme cela a été souligné, avoir une vérification explicite et l'ouverture est une condition de concurrence et en tant que tel, je ne m'attends pas à ce qu'il y ait un fichier API ajouté. Je crois que l'équipe File IO (je ne fais pas partie de cette équipe, donc je ne suis pas sûr, mais c'est ce que j'ai entendu)) envisage de renvoyer cette API nulle au lieu de lancer si le fichier n'existe pas.
Cela peut être ancien, mais il semble qu'ils aient changé la façon dont ils veulent que vous abordiez cela.
Vous êtes censé tenter de créer le fichier, puis reculer si le fichier existe déjà. Ici est la documentation à ce sujet. Je mets à jour ceci parce que c'était le premier résultat sur ma recherche Google pour ce problème.
Donc, dans mon cas, je veux ouvrir un fichier ou le créer s'il n'existe pas. Je crée un fichier et l'ouvre s'il existe déjà. Ainsi:
save = await dir.CreateFileAsync(myFile, CreationCollisionOption.OpenIfExists);
Je suis tombé sur ce billet de blog de Shashank Yerramilli qui fournit une bien meilleure réponse.
J'ai testé cela pour Windows Phone 8 et cela fonctionne. Je ne l'ai pas testé sur Windows Store
Je copie la réponse ici
Pour Windows RT:
public async Task<bool> isFilePresent(string fileName)
{
var item = await ApplicationData.Current.LocalFolder.TryGetItemAsync(fileName);
return item != null;
}
Pour Windows Phone 8
public bool IsFilePresent(string fileName)
{
return System.IO.File.Exists(string.Format(@"{0}\{1}", ApplicationData.Current.LocalFolder.Path, fileName);
}
Vérifiez si un fichier existe dans Windows Phone 8 et WinRT sans exception
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
Vous pouvez utiliser l'ancien appel Win32 comme ceci pour tester si le répertoire existe ou non:
GetFileAttributesExW(path, GetFileExInfoStandard, &info);
return (info.dwFileAttributes & 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
L'autre moyen de vérifier est d'obtenir les fichiers dans le dossier local
var collection = ApplicationData.Current.LocalFolder.GetFilesAsync()
En utilisant cette méthode, puis en itérant sur tous les éléments de la collection et vérifiez sa disponibilité.
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
J'ai essayé d'écrire le mien en utilisant de vieilles astuces:
Dans l'ensemble, il vaut mieux s'en tenir à la méthode de gestion des exceptions.
8.1 a obtenu quelque chose comme ça, j'ai essayé que cela fonctionne.
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
}
La documentation de Dry GetItemAsync dit: "Cet exemple montre comment vérifier l'existence d'un fichier." Il semble que cette API soit officiellement destinée à cet effet.