在面向 UWP 的应用程序中,如果文件(在我的应用程序中修改)已从应用程序无法写入的位置打开(在本例中"另存为"将仅可用),则我想禁用保存("覆盖")按钮。但是,允许应用程序写入KnownFolder.PicturesLibrary,我需要在代码中确定给定的路径是否位于PicturesLibrary(或此位置的嵌套子文件夹)中。
我能够判断一个路径是否是另一个路径的子文件夹,但对于存储文件夹
StorageFolder picturesDirectory = KnownFolders.PicturesLibrary;
我得到空的路径属性值。
那么,我如何判断给定的路径是否位于图片库中?
有什么方法可以将已知文件夹。图片库解析为磁盘路径?
或者我应该使用在文件打开时获得的绝对路径以外的其他东西来识别文件是否来自 PicturesLibrary?
以下是获取图片库路径的方法:
var myPictures = await Windows.Storage.StorageLibrary.GetLibraryAsync(Windows.Storage.KnownLibraryId.Pictures);
string libraryPath = myPictures.SaveFolder.Path;
如果要确定图像是否位于图片库中,可以通过比较路径来实现。
if(imagePath.StartsWith(libraryPath))
{
// Todo
}
当然,您需要打开对图像文件夹的访问权限。
此致敬意。
考虑到答案和注释,我创建了一个简单的例程,它将告诉应用程序是否具有写入访问权限。这一切都是关于创建一个小文件并测试节省几个字节的真正能力。看起来很强大,重要的是它验证了有效的访问,而不是暗示。
代码:
private async Task<bool> CanWriteToSiblingFile(String inputPath)
{
try
{
StorageFile storageFile = await StorageFile.GetFileFromPathAsync(inputPath);
var folder = await storageFile.GetParentAsync();
var newFile = await folder.CreateFileAsync("temp_file.txt", CreationCollisionOption.GenerateUniqueName);
using (Stream stream = await newFile.OpenStreamForWriteAsync())
using (StreamWriter tw = new StreamWriter(stream, Encoding.UTF8))
{
tw.Write("saving ability probe");
tw.Flush();
}
await newFile.DeleteAsync(StorageDeleteOption.PermanentDelete);
return true;
}
catch(Exception ex)
{
return false;
}
}
这个答案解决了根本业务需求(检测覆盖能力),而不是我想用来实现业务要求的更具体的情况,所以更改线程标题可能是合适的......
最好的问候,迈克尔