C# 访问和创建/删除图片库中的文件?

C# 访问和创建/删除图片库中的文件?,c#,uwp,isolatedstorage,hololens,C#,Uwp,Isolatedstorage,Hololens,我正试图在图片库中创建一个文件,如中所述 图片库通常具有以下路径。 %USERPROFILE%\Pictures 我已在应用程序清单中启用图片库功能 像这样: File.WriteAllBytes("%USERPROFILE%/Pictures", fileData); 它返回: DirectoryNotFoundException:找不到路径“C:\Data\Users\DefaultAccount\AppData\Local\DevelopmentFiles\HoloViewerVS.De

我正试图在图片库中创建一个文件,如中所述

图片库通常具有以下路径。
%USERPROFILE%\Pictures

我已在应用程序清单中启用图片库功能

像这样:

File.WriteAllBytes("%USERPROFILE%/Pictures", fileData);
它返回:

DirectoryNotFoundException:找不到路径“C:\Data\Users\DefaultAccount\AppData\Local\DevelopmentFiles\HoloViewerVS.Debug_x86.jth.jh\%USERPROFILE%\Pictures”的一部分 `

当我尝试使用硬编码的用户名时,如:

File.WriteAllBytes("jtth.jh/Pictures", fileData);
它返回相同的DirectoryNotFound异常:

DirectoryNotFoundException:找不到路径“C:\Data\Users\DefaultAccount\AppData\Local\DevelopmentFiles\HoloViewerVS.Debug\u x86.jth.jh\jth.jh\Pictures”的一部分`

那么,如何访问图片库并向其中写入文件?很明显,我肯定错过了一些小东西,因为它试图访问图片库的路径在这里似乎很奇怪

我看到上面写着如何“获取图片库”。使用StorageFolder:

public static StorageFolder PicturesLibrary { get; }
但我不知道如何像使用文件写入一样将文件添加到此文件夹变量

我可以按我尝试的方式来做吗,或者我需要跳过StorageFolder和/或异步环吗

澄清示例:

        string imgName = currentFolderLoaded + "/" + temp.GetComponentInChildren<Text>().text;

        //example imgName to enhance clairty
imgName = C:\dev\Users\jtth\Hololens\ProjectFolder\App\HoloApp\Data\myFiles\pics\example.png

        //load image
        byte[] fileData;
        Texture2D tex = null;

        fileData = File.ReadAllBytes(imgName);
        tex = new Texture2D(2, 2);
        tex.LoadImage(fileData);

        //test hololens access
        //previous attempt -> File.WriteAllBytes("%USERPROFILE%/Pictures", fileData);
        //New attempt
        AsStorageFile(fileData, imgName);

        //Read Texture into RawImage component
        ImgObject.GetComponent<RawImage>().material.mainTexture = tex;

        //Enable component to render image in game
        ImgObject.GetComponent<RawImage>().enabled = true;
string imgName=currentFolderLoaded+“/”+temp.getComponentChildren().text;
//示例imgName增强Clarity
imgName=C:\dev\Users\jth\Hololens\ProjectFolder\App\HoloApp\Data\myFiles\pics\example.png
//加载图像
字节[]文件数据;
Texture2D tex=null;
fileData=File.ReadAllBytes(imgName);
tex=新纹理2d(2,2);
tex.LoadImage(文件数据);
//测试全息透镜存取
//上一次尝试->File.writealBytes(“%USERPROFILE%/Pictures”,fileData);
//新尝试
助理存储文件(fileData,imgName);
//将纹理读入原始图像组件
ImgObject.GetComponent().material.mainTexture=tex;
//启用组件在游戏中渲染图像
ImgObject.GetComponent().enabled=true;
功能:

private static async Task<StorageFile> AsStorageFile(byte[] byteArray, string fileName)
{
    Windows.Storage.StorageFolder storageFolder = Windows.Storage.KnownFolders.PicturesLibrary;
    Windows.Storage.StorageFile sampleFile = await storageFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
    await Windows.Storage.FileIO.WriteBytesAsync(sampleFile, byteArray);
    return sampleFile;
}
专用静态异步任务关联存储文件(字节[]byteArray,字符串文件名)
{
Windows.Storage.StorageFolder StorageFolder=Windows.Storage.KnownFolders.PicturesLibrary;
Windows.Storage.StorageFile sampleFile=等待storageFolder.CreateFileAsync(文件名,CreationCollisionOption.ReplaceExisting);
等待Windows.Storage.FileIO.writeBytes同步(sampleFile,byteArray);
返回样本文件;
}

这是因为UWP应用程序在隔离存储下工作。如链接MSDN文章中的第一个示例所述,执行以下操作:

StorageFolder storageFolder = KnownFolders.PicturesLibrary;
StorageFile file = await storageFolder.CreateFileAsync("sample.png", CreationCollisionOption.ReplaceExisting);
// Do something with the new file.

普通文件.Xxx()调用将被隔离到应用程序自己的小世界。

这是因为UWP应用程序在隔离存储下工作。如链接MSDN文章中的第一个示例所述,执行以下操作:

StorageFolder storageFolder = KnownFolders.PicturesLibrary;
StorageFile file = await storageFolder.CreateFileAsync("sample.png", CreationCollisionOption.ReplaceExisting);
// Do something with the new file.
Plain File.Xxx()调用将被隔离到应用程序自己的小世界中

在运行完这个代码后,我正在检查Hololens上的照片应用程序,它似乎没有创建图片

如果你想在Hololens上的照片应用程序中显示你的照片,实际上你可能需要将照片保存到
CameraRoll
文件夹中

但它似乎无法直接保存,您可能需要移动图片文件作为解决方法

var cameraRollFolder = Windows.Storage.KnownFolders.CameraRoll.Path;            
File.Move(_filePath, Path.Combine(cameraRollFolder, _filename));
详情请参考此

在运行完这个代码后,我正在检查Hololens上的照片应用程序,它似乎没有创建图片

如果你想在Hololens上的照片应用程序中显示你的照片,实际上你可能需要将照片保存到
CameraRoll
文件夹中

但它似乎无法直接保存,您可能需要移动图片文件作为解决方法

var cameraRollFolder = Windows.Storage.KnownFolders.CameraRoll.Path;            
File.Move(_filePath, Path.Combine(cameraRollFolder, _filename));

详细信息请参考。

好的,但什么是“sample.png”?我将图像读入到我的程序中,并将其读入字节数组。我如何将其输入到这个示例中,这是从MSDN逐字复制的示例。我无法帮助你更多,除非看到你自己迄今为止所做的尝试。更新后的帖子。在运行完这段代码后,我正在检查Hololens上的照片应用程序,它似乎没有创建图片?好的,但是什么是“sample.png”?我将图像读入到我的程序中,并将其读入字节数组。我如何将其输入到这个示例中,这是从MSDN逐字复制的示例。我无法帮助你更多,除非看到你自己迄今为止所做的尝试。更新后的帖子。在运行完此代码后,我正在检查Hololens上的Photos应用程序,它似乎没有创建图片?当您读取图像时,您应该能够读取文件名,因此当您根据@TanveerBadar的答案创建存储文件时,您应该能够使用相同的文件名。@AVK更新了帖子。在运行完这个代码后,我正在检查Hololens上的照片应用程序,它似乎没有在这里创建图片?根据我所知,代码运行平稳。。。想法?通过StorageFile来实现,应用程序并没有太多特权,部分是它自己的沙箱。有些方法不起作用,尤其是那些在文件路径上工作的方法。不知何故。当您读取图像时,您应该能够读取文件名,因此当您根据@TanveerBadar的答案创建存储文件时,您应该能够使用相同的文件名。@AVK更新了帖子。在运行完这个代码后,我正在检查Hololens上的照片应用程序,它似乎没有在这里创建图片?根据我所知,代码运行平稳。。。想法?通过StorageFile来实现,应用程序并没有太多特权,部分是它自己的沙箱。有些方法不起作用,尤其是那些在文件路径上工作的方法。不知怎的,如果是这样,那么隔离存储有什么意义呢?它是按设计分类的还是按缺陷分类的?如果是这样,那么使用隔离存储有什么意义?它是保密的吗