有一些方法可以在Windows上使用C#获取下载文件夹,但如何做到这一点才能在Windows和Linux上工作?(如果重要,界面为AvaloniaUI.)

推荐答案

Short Answer: 你不能

许多Linux系统都有下载文件夹,但这只是惯例,标准Linux根本没有下载文件夹.wget和curl等工具在当前工作目录中下载数据,而大多数发行版则以自己独特的方式存储下载文件夹.

您拥有的最简单的 Select 是要求用户在Linux上 Select 他们的下载文件夹,这里有一个代码片段可以帮助您这样做:

    [DllImport("shell32.dll", SetLastError = true)]
    static extern int SHGetKnownFolderPath(ref Guid folderid, uint dwFlags, IntPtr hToken, out IntPtr pszPath);

    static string GetDownloadsFolderPath()
    {
        Guid downloadsFolderId = new Guid("374DE290-123F-4565-9164-39C4925E467B");
        IntPtr pathPtr = IntPtr.Zero;

        int result = SHGetKnownFolderPath(ref downloadsFolderId, 0, IntPtr.Zero, out pathPtr);

        if (result == 0)
        {
            string path = Marshal.PtrToStringAuto(pathPtr);
            Marshal.FreeCoTaskMem(pathPtr);
            return path;
        }
        else
        {
            // Prompt the user for their download path
        }
    }

Csharp相关问答推荐

将序列化的IasyncESYS上传到Azure Blob存储的最佳方法是什么

如果没有中间变量,可空引用类型将无法工作

使用变量子根名称在C#中重新初始化SON文件

有没有一种方法可以在包含混合文本的标签中嵌入超链接?

"virtual"修饰符对接口成员有什么影响?

如果存在对CodeAnalysis.CSharp的引用,则不能引用netStandard2.0库

在发布表单时绑定包含附加(嵌套)列表的对象列表的正确语法是什么

ASP.NET Core 8.0 JWT验证问题:尽管令牌有效,但SecurityTokenNoExpirationError异常

UWP中的任务和界面

C#-从基类更新子类

C#-VS2022:全局使用和保存时的代码清理

CS1660无法将lambda表达式转换为类型INavigationBase,因为它不是委托类型

如果是,我怎么才能让这个加75,如果不是,我怎么才能减go 100?

在被Interactive Server切换后,Blazor SSR页面无法正确加载JS

当我将`ConcurentDictionary`转换为`IDictionary`时,出现了奇怪的并发行为

C#USB条形码 scanner 在第二次扫描时未写入行尾字符

映射器-如何映射到多个实体

NETSDK1201:对于面向.NET 8.0和更高版本的项目,默认情况下,指定RUNTIME标识符将不再生成自包含的应用程序

如何使用LINQ在C#中填充列表列表?

处理方法内部过滤与外部过滤