web-dev-qa-db-ja.com

ファイルが存在するかどうかのUWPチェック

現在、Windows 10 UWPアプリに取り組んでいます。アプリは、特定のPDF「01-introduction」と呼ばれるファイルが存在するかどうかを確認する必要があります。その場合は開きます。私が現在持っているもの:

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

        }

ここにファイルが存在するかどうかを確認するために、ファイルを作成しようとするため、このコードは正しく機能しません。ただし、ファイルがまだ存在しない場合は、空のファイルが作成されます。ファイルが存在しない場合は何も作成しません。存在する場合はPDFを開きます。

可能であれば、「マイマニュアル」と呼ばれるダウンロードフォルダー内のフォルダーを探したいと思います。

どんな助けも大歓迎です。

16
James Tordoff
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/

15
lindexi

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)または、Windows 10 UWPでのみサポートされているFileInfo.Existsを使用できます。

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

System.IO.File.ExistsもUWP方式です。今、Windows IOTでテストします。それだけで動作します。

2
Kursat Turkay

これは私の場合に役立ちました:

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

これは、Windows 10でUWP C#アプリを実行するのに役立ちました...

    StorageFolder app_StorageFolder = await StorageFolder.GetFolderFromPathAsync( @App.STORAGE_FOLDER_PATH );
    var item = await app_StorageFolder.TryGetItemAsync(relative_file_pathname);
    return item != null;
1
Doug Null
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;
        }
    }
1
Ali Yousefi

Win10 IoT Core UWPアプリを実行していますが、CreateFileAsync()はすでに空のファイルスタブをすぐに作成するため、 "Exists"ではなくファイル長を確認する必要があります。しかし、ファイルが置かれるパス全体を決定する前に、その呼び出しが必要です。

っていうことは:

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

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

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
}
0
Sapan Ghafuri

このようにSystem.IO.File.Exists(filePath)は_KnownFolders.DocumentsLibrary.Path_が空の文字列を返すため、DocumentLibraryをテストできません

次の解決策は非常に遅い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");
_
0
Jarek