2016-10-03 11 views
0

Я пытаюсь обеспечить копирование файла в другое место - по причинам SQLite (см. UWP App SQLite Access database in Documents Library).Проверка записи файлов в UWP C#

Проблема заключается в том, что если я удалю доступ к целевому StorageFile (т. Е. Вытащив USB-накопитель, а затем попытавшись сохранить), метод CopyAndReplaceAsync StorageFile не укажет, не будет ли файл не записан.

Итак, пытаясь открыть файл, чтобы проверить, что он был успешно написан (с помощью GetFileFromPathAsync), генерируется исключение COM (поскольку файл отсутствует), но он никогда не завершает задачу даже после обнаружения ошибки.

Я пытаюсь выяснить, есть ли лучший способ сделать это. Я попытался использовать FileIO, чтобы сделать то же самое, но даже если файл, который я пишу, находится в FutureAccessList, похоже, хотите предоставить доступ.

Любые идеи/осложнения/методы Я просто не использую правильно?

Соответствующий код у меня есть ниже:

try { 
    if (file != null) { 
     await file.CopyAndReplaceAsync(App.SaveFile); 
     var newFile = await StorageFile.GetFileFromPathAsync(App.SaveFile.Path); 
} 

//user prompt below 

ответ

0

По вашему описанию, это, кажется, вы хотите проверить существование файла. Если это так, вы можете использовать свойство StorageFile.IsAvailable или StorageFolder.TryGetItemAsync.

Ref Common questions and answers about files and app data, part 2: Files:

Q. Какой самый лучший способ проверить существование файла?

A. На Windows используйте свойство StorageFile.IsAvailable или StorageFolder.TryGetItemAsync, которые были представлены в Windows 8.1 для этой цели. Однако на Windows Phone 8.1 эти члены недоступны, поэтому в настоящее время вам необходимо позвонить StorageFolder.GetFileAsync в блок try/catch и проверить исключения «файл не найден». (Этот подход также работает в Windows.) Обратите внимание, что если вы проверяете, нужно ли создавать файл, просто используйте StorageFolder.CreateFileAsync с CreateCollisionOption.OpenIfExists.

Хотя эта статья написана для Windows 8.1 и Windows Phone 8.1, она по-прежнему применяется к приложениям UWP. И в UWP свойство StorageFile.IsAvailable и метод StorageFolder.TryGetItemAsync являются универсальными API-интерфейсами, они могут использоваться на всех устройствах Windows 10.