c# - una - validar si existe archivo vba
¿Cómo verificar si el archivo existe en una aplicación de la Tienda Windows? (10)
¿Hay alguna otra manera de verificar si un archivo existe en una aplicación de la Tienda Windows?
try
{
var file = await ApplicationData.Current.LocalFolder.GetFileAsync("Test.xml");
//no exception means file exists
}
catch (FileNotFoundException ex)
{
//find out through exception
}
8.1 obtuve algo como esto, lo intenté funcionó.
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
}
De acuerdo con la respuesta aceptada en esta publicación , no hay otra manera en este momento. Sin embargo, el equipo de File IO está considerando cambiar la API para que devuelva null en lugar de lanzar una excepción.
Cita de la publicación vinculada:
Actualmente, la única forma de comprobar si existe un archivo es capturar la excepción FileNotFoundException. Como se ha señalado, tener una verificación explícita y la apertura es una condición de carrera y, como tal, no espero que exista ningún archivo. Creo que el equipo de File IO (no estoy en ese equipo, así que no estoy seguro, pero esto es lo que he escuchado) está considerando tener esta API de retorno nulo en lugar de lanzar si el archivo no existe.
El otro medio para verificar es obtener archivos en la carpeta local
var collection = ApplicationData.Current.LocalFolder.GetFilesAsync()
Usando este método y luego iterando sobre todos los elementos en la colección y verifica su disponibilidad.
Esto puede ser antiguo, pero parece que han cambiado cómo quieren que te acerques a esto.
Se supone que debes intentar hacer el archivo, luego retroceder si el archivo ya existe. Aquí está la documentación sobre esto. Estoy actualizando esto porque este fue el primer resultado en mi búsqueda de Google para este problema.
Entonces, en mi caso, quiero abrir un archivo o crearlo si no existe. Lo que hago es crear un archivo y abrirlo si ya existe. Al igual que:
save = await dir.CreateFileAsync(myFile, CreationCollisionOption.OpenIfExists);
La documentación para TryGetItemAsync dice: "Este ejemplo muestra cómo verificar la existencia de un archivo". Parece que esta API tiene la intención oficial de servir para ese propósito.
Me encontré con esta publicación de blog de Shashank Yerramilli que ofrece una respuesta mucho mejor.
He probado esto para Windows Phone 8 y funciona. No lo he probado en Windows Store aunque
Estoy copiando la respuesta aquí
Para la aplicación de Windows RT:
public async Task<bool> isFilePresent(string fileName)
{
var item = await ApplicationData.Current.LocalFolder.TryGetItemAsync(fileName);
return item != null;
}
Para Windows Phone 8
public bool IsFilePresent(string fileName)
{
return System.IO.File.Exists(string.Format(@"{0}/{1}", ApplicationData.Current.LocalFolder.Path, fileName);
}
Compruebe si existe un archivo en Windows Phone 8 y WinRT sin excepción
Microsoft ha agregado una nueva función a StorageFile en Windows 8.1 para permitir a los ingenieros del usuario determinar si se puede acceder a un archivo: IsAvailable
Puede usar la antigua llamada Win32 como esta para probar si el directorio existe o no:
GetFileAttributesExW(path, GetFileExInfoStandard, &info);
return (info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? false: true;
Funciona en aplicaciones de escritorio y Metro: http://msdn.microsoft.com/en-us/library/windows/desktop/aa364946%28v=vs.85%29.aspx
Traté de escribir el mío usando viejos trucos:
- GetFileAttributesEx () siempre parece terminar con ERROR_ACCESS_DENIED si el archivo se selecciona a través de FileOpenPicker;
- Lo mismo para FindFirstFileEx ();
- _stat () siempre termina con ENOENT cuando el archivo se selecciona a través de FileOpenPicker;
- La opción CreateFile2 () con CREATE_NEW funciona: si el archivo existe, fallará con INVALID_HANDLE_VALUE return value y ERROR_FILE_EXISTS último error; si el archivo no existe, debe recordar eliminar el archivo creado posteriormente.
En general, es mejor que sigas con el método de manejo de excepciones.
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