7

Attualmente sto lavorando a un'app UWP di Windows 10. L'app deve verificare se esiste un determinato file PDF chiamato "01-introduzione" e, in tal caso, aprirlo. Ho già il codice per se il file non esiste. il codice qui sotto è quello che hanno attualmente:Verifica UWP se il file esiste

 try 
     { 
      var test = await DownloadsFolder.CreateFileAsync("01-Introduction.pdf", CreationCollisionOption.FailIfExists); 
     } 
     catch 
     { 

     } 

Questo codice non funziona correttamente a causa di verificare se il file esiste qui, cerco di creare il file. Tuttavia se il file non esiste già verrà creato un file vuoto. Non voglio creare nulla se il file non esiste, basta aprire il PDF se lo fa.

Se possibile, vorrei guardare all'interno di una cartella che si trova nella cartella dei download denominata "I miei manuali".

Qualsiasi aiuto sarebbe molto apprezzato.

+0

La cartella "Swift Manuals" è stata creata dall'app? Per impostazione predefinita, l'app può accedere solo a file e cartelle nella cartella Download dell'utente creata dall'app. Tuttavia, è possibile accedere a file e cartelle nella cartella Download dell'utente chiamando un selettore di file ([FileOpenPicker] (https://msdn.microsoft.com/library/windows/apps/br207847) o [FolderPicker] (https: //msdn.microsoft.com/library/windows/apps/br207881)) in modo che gli utenti possano navigare e selezionare file o cartelle per l'accesso alla tua app. –

+0

@ JayZuo-MSFT Grazie per il chiarimento Jay. Questo è il problema che abbiamo riscontrato. Quindi possiamo ottenere l'accesso alla directory per i download. Dobbiamo guardare un altro approccio e fare un po 'più di lettura. –

+0

Se si crea un file o una cartella nella cartella Download, si consiglia di aggiungerlo all'app [FutureAccessList] dell'app (https://msdn.microsoft.com/library/windows/apps/br207457) in modo che l'app possa accedere facilmente a quell'elemento in futuro. Per ulteriori informazioni, consultare [Autorizzazioni di accesso ai file] (https://msdn.microsoft.com/en-us/windows/uwp/files/file-access-permissions). –

risposta

-1

In questo caso è possibile utilizzare la classe FileInfo. Ha un metodo chiamato FileInfo.Exists(), che restituisce un risultato bool

https://msdn.microsoft.com/en-us/library/system.io.fileinfo.exists(v=vs.110).aspx

EDIT:

Se si vuole verificare l'esistenza dei file, sarà necessario creare un oggetto StorageFile e call uno dei metodi GetFile .... Come ad esempio:

StorageFile file = new StorageFile(); 
file.GetFileFromPathAsync("Insert path") 

if(file == null) 
{ 
    /// File doesn't exist 
} 

Ho dato un'occhiata veloce per trovare il percorso della cartella download, ma nessuna gioia, ma il metodo GetFile dovrebbe dare la risposta alla tua ricerca

+1

Grazie Ben, sia tu che Absolute avete centrato la giusta direzione, ma sfortunatamente al momento sto solo restituendo False, ho commentato sopra con Absolute, come posso confermare su quale directory/cartella si cerca il FileInfo? –

+0

Penso che potrebbe essere necessario utilizzare le funzioni getfile per vedere se restituiscono un oggetto o null. Risposta aggiornata –

3

Ci sono due metodi

1) È possibile utilizzare StorageFolder.GetFileAsync() poiché è supportato anche dai dispositivi Windows 8.1 e WP 8.1.

try 
{ 
    StorageFile file = await DownloadsFolder.GetFileAsync("01-Introduction.pdf"); 
} 
catch 
{ 
    Debug.WriteLine("File does not exits"); 
} 

2) Oppure si può usare FileInfo.Exists supportato solo per Windows 10 UWP.

FileInfo fInfo = new FileInfo("01-Introduction.pdf"); 
if (!fInfo.Exists) 
{ 
    Debug.WriteLine("File does not exits"); 
} 
+3

Sfortunatamente (1) non sembra disponibile all'interno di Windows 10 UWP non esiste una definizione di GetFileAsync per DownloadsFolder. (2) sembra essere proprio quello che sto cercando, purtroppo restituisco sempre False, come faccio a specificare quale cartella deve essere cercata per il FileInfo. Sto solo supportando Win10 e non è affatto compatibile all'indietro. –

+0

Sei sicuro che DownloadFolder è un tipo StorageFolder, in tal caso dovrebbe avere una definizione. Prova a incollare l'intero codice, lo verificherò – AbsoluteSith

+0

DownloadFolder non ha il metodo GetFileAsync() – Archana

6
public async Task<bool> isFilePresent(string fileName) 
{ 
    var item = await ApplicationData.Current.LocalFolder.TryGetItemAsync(fileName); 
    return item != null; 
} 

Ma non supportare Win8/WP8.1

https://blogs.msdn.microsoft.com/shashankyerramilli/2014/02/17/check-if-a-file-exists-in-windows-phone-8-and-winrt-without-exception/

+0

Questa non è la cartella Download. –

+0

Scrivi il pacchetto.appxmanifest. – lindexi

+0

Genera un'eccezione quando l'elemento non viene trovato. – Reynevan

0

È possibile utilizzare System.IO.File. Esempio:

// If file located in local folder. You can do the same for other locations. 
string rootPath = ApplicationData.Current.LocalFolder.Path; 
string filePath = Path.Combine(rootPath, "fileName.pdf"); 

if (System.IO.File.Exists(filePath)) 
{ 
    // File exists 
} 
else 
{ 
    // File doesn't exist 
} 
+1

Sebbene non sia "il modo UWP" (in particolare, esegue un'operazione I/O, anche se molto veloce, in modo sincrono), questa è un'opzione valida per le app UWP (Win10). Tieni presente che l'app non avrà alcun tipo di blocco sul file; se un altro thread o processo rimuove o crea il file tra controllo e utilizzo, è possibile ottenere un comportamento imprevisto (e potenzialmente dannoso). – CBHacking

0

Sto facendo un'applicazione Win10 degli oggetti Nucleo UWP e devo controllare la lunghezza file invece di "esiste", perché CreateFileAsync() crea già un file stub vuoto immediatamente. Ma ho bisogno di quella chiamata prima per determinare l'intero percorso in cui si troverà il file.

Quindi è:

var destinationFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("MyFile.wow", ...); 

    if (new FileInfo(destinationFile.Path).Length > 0) 
     return destinationFile.Path; 
1

System.IO.File.Exists è il modo UWP troppo. Ora collaudo in Windows IOT. funziona e basta

0

In questo modo System.IO.File.Exists(filePath) non riesco a provare DocumentLibrary perché KnownFolders.DocumentsLibrary.Path ritorno stringa vuota

soluzione successiva è molto lento await DownloadsFolder.GetFileAsync("01-Introduction.pdf")

IMHO il modo migliore è di raccogliere tutti i file dalla cartella e verificare il nome del file esiste.

List<StorageFile> storageFileList = new List<StorageFile>(); 

storageFileList.AddRange(await KnownFolders.DocumentsLibrary.GetFilesAsync(CommonFileQuery.OrderByName)); 

bool fileExist = storageFileList.Any(x => x.DisplayName == "01-Introduction.pdf");