7

В настоящее время я работаю над приложением Windows 10 UWP. Приложение должно проверить, существует ли определенный файл PDF, называемый «01-введение», и если это так открыть. У меня уже есть код, если файл не существует. Кодекс Ниже то, что я в настоящее время:UWP Check Если файл существует

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

     } 

Этот код не работает правильно, потому что, чтобы проверить, существует ли файл здесь, я пытаюсь создать файл. Однако, если файл еще не существует, будет создан пустой файл. Я не хочу ничего создавать, если файл не существует, просто откройте PDF, если это произойдет.

Если возможно, я хотел бы заглянуть в папку, которая находится в папке с загрузкой под названием «Мои руководства».

Любая помощь была бы принята с благодарностью.

+0

Является ли папка «Swift Manuals» созданной приложением? По умолчанию ваше приложение может получать доступ только к файлам и папкам в папке «Загружаемые» пользователя, созданные вашим приложением. Однако вы можете получить доступ к файлам и папкам в папке «Загружаемые файлы», вызывая сборщик файлов ([FileOpenPicker] (https://msdn.microsoft.com/library/windows/apps/br207847) или [FolderPicker] (https: //msdn.microsoft.com/library/windows/apps/br207881)), чтобы пользователи могли перемещаться и выбирать файлы или папки для доступа к вашему приложению. –

+0

@ JayZuo-MSFT Спасибо за разъяснение Джей. Это проблема, с которой мы сталкиваемся. Таким образом, мы можем получить доступ к каталогам. Нам нужно взглянуть на другой подход и немного почитать. –

+0

Если вы создаете файл или папку в папке «Загрузки», мы рекомендуем добавить этот элемент в [FutureAccessList] вашего приложения (https://msdn.microsoft.com/library/windows/apps/br207457), чтобы ваше приложение могло легко получить доступ к этому предмету в будущем. Для получения дополнительной информации см. [Разрешения доступа к файлам] (https://msdn.microsoft.com/en-us/windows/uwp/files/file-access-permissions). –

ответ

-1

В этом случае вы можете использовать класс FileInfo. Он имеет метод, называемый FileInfo.Exists(), который возвращает результат булева

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

EDIT:

Если вы хотите, чтобы проверить наличие файлов, вам нужно будет создать объект StorageFile и вызов один из методов GetFile ..... Такие, как:

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

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

Я был беглый взгляд, чтобы найти путь загрузки папки, но не радость, но метод GetFile должен дать вам ответ ваш ищет

+1

Спасибо Бен, и вы, и Absolute попали в правильном направлении, но, к сожалению, я в настоящее время возвращаю False, я прокомментировал выше с Absolute, как я могу подтвердить, какой каталог/папка искал FileInfo? –

+0

Я думаю, вам может понадобиться использовать функции getfile, чтобы увидеть, возвращают ли они объект или null. Ответ обновлен –

3

Есть два способа

1) Вы можете использовать StorageFolder.GetFileAsync(), так как это также поддерживается устройствами Windows 8.1 и WP 8.1.

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

2) Или вы можете использовать FileInfo.Exists поддерживается только для Windows 10 UWP.

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

К сожалению (1) не представляется доступным в Windows 10 UWP нет определения of GetFileAsync для DownloadsFolder. (2) похоже на то, что я ищу, к сожалению, я всегда возвращаю False, как я могу указать, какую папку нужно искать для FileInfo. Я поддерживаю только Win10, а не наоборот совместим. –

+0

Вы уверены, что DownloadFolder - это тип StorageFolder, если он должен иметь определение. Попробуйте вставить весь код, я проверю его – AbsoluteSith

+0

DownloadFolder не имеет метода GetFileAsync() – Archana

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

Но не поддерживают 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

Это не папка «Загрузки». –

+0

Вы пишете Package.appxmanifest. – lindexi

+0

Он выдает исключение, если элемент не найден. – Reynevan

0

Вы можете использовать System.IO.File. Пример:

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

Хотя это не «путь UWP» (в частности, он выполняет операцию ввода-вывода - хотя и очень быстрый - синхронно), это жизнеспособный вариант для приложений UWP (Win10). Просто имейте в виду, что приложение не будет блокировать файл; если другой поток или процесс удаляет или создает файл между проверкой и использованием, вы можете получить неожиданное (и потенциально опасное) поведение. – CBHacking

0

Я делаю приложение Win10 IoT Ядро UWP и я должен проверить длину файла вместо «Exists», потому что CreateFileAsync() уже создает пустой файл заглушки сразу. Но мне нужен этот вызов раньше, чтобы определить весь путь, по которому будет находиться файл.

Так что:

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

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

System.IO.File.Exists является UWP слишком. Я тестирую сейчас в Windows IOT. он просто работает.

0

Таким образом System.IO.File.Exists(filePath) я не могу проверить DocumentLibrary потому что KnownFolders.DocumentsLibrary.Path возвращения пустой строки

Следующее решение очень медленно await DownloadsFolder.GetFileAsync("01-Introduction.pdf")

ИМХИ самый лучший способ собрать все файлы из папки и проверьте имя файла существует.

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

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

bool fileExist = storageFileList.Any(x => x.DisplayName == "01-Introduction.pdf"); 
Смежные вопросы