Подтвердить что ты не робот

UWP Проверьте, существует ли файл

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

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

        }

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

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

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

4b9b3361

Ответ 2

Существует два метода

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 UWP.

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

Ответ 3

System.IO.File.Exists - это также метод UWP. Я тестирую сейчас в Windows IOT. он просто работает.

Ответ 4

Это помогло мне в моем случае:

ApplicationData.Current.LocalFolder.GetFileAsync(path).AsTask().ContinueWith(item => { 
    if (item.IsFaulted)
        return; // file not found
    else { /* process file here */ }
});

Ответ 5

public override bool Exists(string filePath)
    {
        try
        {
            string path = Path.GetDirectoryName(filePath);
            var fileName = Path.GetFileName(filePath);
            StorageFolder accessFolder = StorageFolder.GetFolderFromPathAsync(path).AsTask().GetAwaiter().GetResult();
            StorageFile file = accessFolder.GetFileAsync(fileName).AsTask().GetAwaiter().GetResult();
            return true;
        }
        catch
        {
            return false;
        }
    }

Ответ 6

Вы можете использовать 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
}

Ответ 7

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

Итак, это:

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

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

Ответ 8

Таким образом, 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.Name == "01-Introduction.pdf");

Ответ 9

Это помогло мне запустить приложение UWP С# в Windows 10...

    StorageFolder app_StorageFolder = await StorageFolder.GetFolderFromPathAsync( @App.STORAGE_FOLDER_PATH );
    var item = await app_StorageFolder.TryGetItemAsync(relative_file_pathname);
    return item != null;

Ответ 10

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

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 должен дать вам ответ на ваш поиск

Ответ 11

В Window 10 для меня это самый "элегантный" способ:

private static bool IsFileExistent(StorageFile file)
{
    return File.Exists(Path.Combine(file.Path));
}

Или, как расширение, если вы предпочитаете и будете широко его использовать:

static class Extensions
{
    public static bool Exists(this StorageFile file)
    {
        return File.Exists(Path.Combine(file.Path));
    }
}