7

Ich arbeite gerade an einer Windows 10 UWP App. Die App muss überprüfen, ob eine bestimmte PDF-Datei existiert "01-Einführung", und wenn ja, öffnen Sie es. Ich habe bereits den Code für, wenn die Datei nicht existiert. Der folgende Code ist, was ich derzeit haben:UWP Prüfen ob Datei existiert

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

     } 

Dieser Code nicht richtig funktioniert, weil zu überprüfen, ob die Datei hier vorhanden ist, ich versuche, die Datei zu erstellen. Wenn die Datei noch nicht existiert, wird eine leere Datei erstellt. Ich möchte nichts erstellen, wenn die Datei nicht existiert, öffnen Sie einfach die PDF, wenn dies der Fall ist.

Wenn möglich, würde ich gerne in einen Ordner schauen, der sich im Download-Ordner "My Manuals" befindet.

Jede Hilfe würde sehr geschätzt werden.

+0

Wird der Ordner "Swift Manuals" von Ihrer App erstellt? Standardmäßig kann Ihre App nur auf Dateien und Ordner im Downloads-Ordner des Nutzers zugreifen, die von Ihrer App erstellt wurden. Sie können jedoch auf den Zugriff auf Dateien und Ordner im Downloads-Ordner des Benutzers zugreifen, indem Sie eine Dateiauswahl ([FileOpenPicker] (https://msdn.microsoft.com/library/windows/apps/br207847) oder [FolderPicker] (https: (http://msdn.microsoft.com/library/windows/apps/br207881)), damit Benutzer navigieren und Dateien oder Ordner auswählen können, auf die Ihre App zugreifen kann. –

+0

@ JayZuo-MSFT Danke für die Klarstellung Jay. Dies ist das Problem, auf das wir gestoßen sind. So können wir Verzeichniszugriff auf Downloads erhalten. Wir müssen einen anderen Ansatz betrachten und ein wenig mehr lesen. –

+0

Wenn Sie eine Datei oder einen Ordner im Ordner "Downloads" erstellen, empfehlen wir, dass Sie das Element zur [FutureAccessList] (https://msdn.microsoft.com/library/windows/apps/br207457) Ihrer App hinzufügen, damit Ihre App es kann in Zukunft einfach auf dieses Element zugreifen. Weitere Informationen finden Sie unter [Dateizugriffsrechte] (https://msdn.microsoft.com/en-us/windows/uwp/files/file-access-permissions). –

Antwort

-1

In diesem Fall können Sie die FileInfo-Klasse verwenden. Es hat eine Methode namens FileInfo.Exists(), die ein Bool Ergebnis liefert

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

EDIT:

Wenn Sie die Dateien Existenz überprüfen möchten, müssen Sie ein StorageFile Objekt und Aufruf erstellen eine der GetFile .... Methoden. Wie zum Beispiel:

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

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

ich einen kurzen Blick hatte den Download-Ordner Pfad zu finden, aber keine Freude, aber die GetFile Methode sollten Sie die Antwort geben Ihre

+1

Danke Ben, sowohl Sie als auch Absolute haben in die richtige Richtung getroffen, aber leider gebe ich derzeit nur False zurück, ich habe oben mit Absolute kommentiert, wie kann ich bestätigen, welches Verzeichnis/Ordner nach der FileInfo gesucht wird? –

+0

Ich denke, Sie müssen möglicherweise die Getfile-Funktionen verwenden, um zu sehen, ob sie ein Objekt oder Null zurückgeben. Antwort aktualisiert –

3

suchen Es gibt zwei Methoden

1) Sie können StorageFolder.GetFileAsync() verwenden, da dies auch von Windows 8.1- und WP 8.1-Geräten unterstützt wird.

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

2) Oder Sie FileInfo.Exists nur für Windows 10 UWP unterstützt verwenden.

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

Leider (1) scheint nicht verfügbar in Windows 10 UWP gibt es keine Definition von GetFileAsync für DownloadsFolder. (2) scheint genau das zu sein, wonach ich suche, leider gebe ich immer False zurück, wie gebe ich an, welcher Ordner nach der FileInfo durchsucht werden soll. Ich unterstütze nur Win10 und bin überhaupt nicht abwärtskompatibel. –

+0

Sind Sie sicher, dass DownloadFolder ein StorageFolder-Typ ist, wenn ja, sollte es eine Definition haben. Versuchen Sie, Ihren gesamten Code einzufügen, ich werde es überprüfen – AbsoluteSith

+0

DownloadFolder hat keine GetFileAsync() -Methode – Archana

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

Aber nicht unterstützen 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

Das ist nicht der Ordner Downloads. –

+0

Schreiben Sie das Paket.appxmanifest. – lindexi

+0

Es wird eine Ausnahme ausgelöst, wenn das Element nicht gefunden wird. – Reynevan

0

Sie System.IO.File verwenden können. Beispiel:

// 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

Obwohl es nicht "der UWP-Weg" ist (insbesondere macht es eine I/O-Operation - wenn auch eine sehr schnelle - synchron), ist dies eine praktikable Option für UWP (Win10) -Apps. Beachten Sie jedoch, dass die App keine Sperre für die Datei aufweist. Wenn ein anderer Thread oder Prozess die Datei zwischen Prüfung und Verwendung entfernt oder erstellt, kann dies zu unerwartetem (und potenziell schädlichem) Verhalten führen. – CBHacking

0

Ich mache ein Win10 IoT-Core UWP app und ich habe die Dateilänge zu prüfen, anstelle von „Exists“, weil CreateFileAsync() bereits sofort eine leere Datei Stub erstellt. Aber ich brauche diesen Aufruf vorher, um den gesamten Pfad zu bestimmen, in dem sich die Datei befinden wird.

So ist es:

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

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

System.IO.File.Exists ist zu UWP Art und Weise. Ich teste jetzt in Windows IOT. es funktioniert einfach.

0

Auf diese Weise System.IO.File.Exists(filePath) kann ich testen, nicht DocumentLibrary weil KnownFolders.DocumentsLibrary.Path Rückkehr leeren String

Nächste Lösung ist sehr langsam await DownloadsFolder.GetFileAsync("01-Introduction.pdf")

IMHO der beste Weg, um alle Dateien aus dem Ordner ist sammeln und prüfen Sie den Dateinamen vorhanden sind.

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

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

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