以编程方式检查文件是否可以从 UWP 访问

问题描述

给定文件选择器/选择器中的文件位置。如何检查 UWP 是否可以访问该文件

解决方法

不确定你的意思,但在这里

public FileStream TryOpen(string filePath,FileMode fileMode,FileAccess fileAccess,FileShare fileShare,int maximumAttempts,int attemptWaitMS)
{
    FileStream fs = null;
    int attempts = 0;

    // Loop allow multiple attempts
    while (true)
    {
        try
        {
            fs = File.Open(filePath,fileMode,fileAccess,fileShare);

            //If we get here,the File.Open succeeded,so break out of the loop and return the FileStream
            break;
        }
        catch (IOException ioEx)
        {
            // IOExcception is thrown if the file is in use by another process.

            // Check the numbere of attempts to ensure no infinite loop
            attempts++;
            if (attempts > maximumAttempts)
            {
                // Too many attempts,cannot Open File,break and return null 
                fs = null;
                break;
            }
            else
            {
                // Sleep before making another attempt
                Thread.Sleep(attemptWaitMS);

            }

        }

    }
    // Reutn the filestream,may be valid or null
    return fs;
}
,

您可以在 Package.appxmanifest 中添加 broadFileSystemAccess 功能。 此外,BroadFileSystemAccess 是一项受限功能。可以在设置 > 隐私 > 文件系统中配置访问权限。

<Package
  ...
  xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  IgnorableNamespaces="uap mp rescap">
...
<Capabilities>
    <rescap:Capability Name="broadFileSystemAccess" />
</Capabilities>

然后您可以使用以下简单示例来检查文件是否可读可写。

var file =await StorageFile.GetFileFromPathAsync(path);
using (var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite))
            {
                bool read = stream.CanRead;
                bool write = stream.CanWrite;
            }

文件能否读取取决于很多因素。您应该考虑到这一点:

1.文件可能不存在
2.文件可能被其他进程锁定

3.某人/某物可以在应用程序执行期间更改对文件的访问

如果发生错误,上面的代码会引发异常。