C# 如何将http客户端的图像保存到UWP中的特定文件夹

C# 如何将http客户端的图像保存到UWP中的特定文件夹,c#,uwp,C#,Uwp,我有一个小功能,可以从http客户端保存图像,但我有两个问题 图像保存在bin文件夹中,我在创建的项目中有一个名为photos的文件夹,我希望代码保存在该文件夹中 我想获得8个以上的图像,而不是覆盖当前图像,因为另一个调用将重写图像。我的代码如下,不同的ID会给出不同的图像: 因此,结果是一个名为test的文件,但覆盖了前一个文件。我想保存所有这些文件并保存在项目中的一个文件夹中。我该怎么办?欢迎提出任何建议,谢谢。1。 执行newfilestream(“test”,…)将在\test打开一

我有一个小功能,可以从http客户端保存图像,但我有两个问题

  • 图像保存在bin文件夹中,我在创建的项目中有一个名为photos的文件夹,我希望代码保存在该文件夹中

  • 我想获得8个以上的图像,而不是覆盖当前图像,因为另一个调用将重写图像。我的代码如下,不同的ID会给出不同的图像:

  • 因此,结果是一个名为test的文件,但覆盖了前一个文件。我想保存所有这些文件并保存在项目中的一个文件夹中。我该怎么办?欢迎提出任何建议,谢谢。

    1。 执行
    newfilestream(“test”,…)
    将在
    \test
    打开一个新的文件流,这不是我们想要的,因为
    是执行程序的目录。相反,所有应用程序数据都应进入
    环境。SpecialFolder.ApplicationData\YourApplicationName
    中,因此:

    var photoLocation=Path.Combine(Environment.SpecialFolder.ApplicationData,“MyUwpApp”,“Photos”,“test”);
    //确保%AppData%\MyUwpApp\Photos存在,如果不存在,请创建它
    如果(!Directory.Exists(Path.GetDirectoryName(photoLocation))
    CreateDirectory(Path.GetDirectoryName(photoLocation));
    stream=新文件流(photoLocation,FileMode.Create,FileAccess.Write);
    
    您可以检查目录是否存在于循环之外,只检查一次。但是,如果
    Photos
    MyUwpApp
    在循环期间被删除,您的程序可能会崩溃。您还可以保存
    Path.GetDirectoryName(photoLocation)的返回值
    如果你真的想,避免打两次电话

    2. 您需要唯一的文件名。最简单的方法是将
    id
    附加到每个文件中,就像Roy Cohen在他们的评论中所说的:

    var photoLocation=Path.Combine(Environment.SpecialFolder.ApplicationData,“MyUwpApp”,“Photos”,“test”,id.ToString());
    
    尝试将文件名从
    “test”
    更改为类似
    $“test{id}”
    。没有“项目”的概念当编译后的应用程序运行时。谢谢,但是当我运行此应用程序时,我在我提供的路径上收到一个权限被拒绝的错误。@Megatron213您可以在package.appxmainfest中声明。这是一个受限制的功能。可在“设置”>“隐私”>“文件系统”中配置访问权限。
    using (var httpClient = new HttpClient())
    {
        using (var request = new HttpRequestMessage(HttpMethod.Get, url+id))
        {
            request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", result.AccessToken);
            using (
                Stream contentStream = await (await httpClient.SendAsync(request)).Content.ReadAsStreamAsync(),
                stream = new FileStream("test", FileMode.Create, FileAccess.Write))
            {
                await contentStream.CopyToAsync(stream);
            }
        }
    }