首页 > 编程语言 >dotnet C# 使用 Win32 函数获取用户下载文件夹的路径的方法

dotnet C# 使用 Win32 函数获取用户下载文件夹的路径的方法

时间:2024-04-26 09:01:46浏览次数:14  
标签:git C# 代码 gitee Win32 文件夹 dotnet Guid

大家都知道,在 dotnet 里面的可以使用 Environment.GetFolderPath 方法配合 Environment.SpecialFolder 枚举列出当前运行环境下的一些特殊文件夹。然而 SpecialFolder 枚举不包含对 Download 下载文件夹的枚举值,如咱需要获取用户当前的下载文件夹,需要使用 Win32 方法来辅助获取

在 dotnet 官方,已经有人提议给 SpecialFolder 添加更多的枚举,相应的提议请参阅: https://github.com/dotnet/runtime/issues/70484

在 Windows 上,核心实现是通过 SHGetKnownFolderPath 这个 Win32 方法,先查阅文档,定义下载文件的 Guid 值和此 Win32 方法,代码如下

var downloadFolderGuid = new Guid("374DE290-123F-4565-9164-39C4925E467B");

[DllImport("shell32.dll", CharSet = CharSet.Unicode, ExactSpelling = true, PreserveSig = false)]
static extern string SHGetKnownFolderPath([MarshalAs(UnmanagedType.LPStruct)] Guid id, int flags, IntPtr token);

调用方法的代码如下

var downloadFolderPath = SHGetKnownFolderPath(downloadFolderGuid, 0, IntPtr.Zero);

完全的代码如下

using System.Runtime.InteropServices;

var downloadFolderGuid = new Guid("374DE290-123F-4565-9164-39C4925E467B");

var downloadFolderPath = SHGetKnownFolderPath(downloadFolderGuid, 0, IntPtr.Zero);
Console.WriteLine(downloadFolderPath);
[DllImport("shell32.dll", CharSet = CharSet.Unicode, ExactSpelling = true, PreserveSig = false)]
static extern string SHGetKnownFolderPath([MarshalAs(UnmanagedType.LPStruct)] Guid id, int flags, IntPtr token);

本文代码放在 githubgitee 上,可以使用如下命令行拉取代码

先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码

git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin 7980a73b687c430486843b81596689f809b7add0

以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源。请在命令行继续输入以下代码,将 gitee 源换成 github 源进行拉取代码

git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
git pull origin 7980a73b687c430486843b81596689f809b7add0

获取代码之后,进入 HebeefeacuLurnaheehaja 文件夹,即可获取到源代码

标签:git,C#,代码,gitee,Win32,文件夹,dotnet,Guid
From: https://www.cnblogs.com/lindexi/p/18132456

相关文章

  • 什么是 Docker?Docker详解,7分钟学会
    Docker容器是一种打包格式,可通过标准格式打包应用的所有代码和依赖关系,确保应用能够快速、可靠地在计算环境下运行。Docker容器是一种广受欢迎的轻量级、可执行的独立容器,其中包含应用运行所需的一切要素,包括库、系统工具、代码和运行时。此外,Docker还是一个软件平台,支持开发人......
  • 使用 ForAttributeWithMetadataName 提高 IIncrementalGenerator 增量 Source Generat
    本文将告诉大家如何使用ForAttributeWithMetadataName方法用来提高IIncrementalGenerator增量SourceGenerator源代码生成的开发效率以及提高源代码生成器的运行效率这是一个在2022的6月15才合入的新功能。原因是Roslyn团队发现了大量的源代码生成器和分析器项目都......
  • linux(麒麟 centos7)安装7z
    1、下载7-Zip下载地址:7-Zip-程序下载  2、解压mkdir7zip--创建文件夹7zipmv7z2301-linux-x64.tar.xz7zip/--移动cd7ziptar-xvJf7z2301-linux-x64.tar.xz--解压输入ll查看解压后的文件3、安装cp7zzs/usr/local/bin/输入7zzs查看是否安装成功4......
  • Nginx 配置文件 nginx.conf
    #帮助限制Nginx进程的权限,从而减少系统遭受恶意攻击的风险#通常,出于安全考虑,推荐不使用root用户运行网络服务#user<username>[groupname];#设置Nginx将启动的工作进程数目(默认为1)#worker_processes7;#可以填数字#worker_processesauto;#auto代表......
  • system-v IPC共享内存通信
    目录systemvIPC简介共享内存需要用到的函数接口shmget函数--获取对象IDshmat函数--获得映射空间shmctl函数--释放资源共享内存实现思路注意systemvIPC简介消息队列、共享内存和信号量统称为systemvIPC(进程间通信机制),V是罗马数字5,是UNIX的AT&T分支的其中一个版本,一般称它......
  • 攻防世界逆向-难度1- easyre-xctf
    攻防世界-难度1easyre-xctf.zipUpx壳这里先直接用工具脱壳,后面学会手动脱壳再回来补充。工具下载地址:https://down.52pojie.cn/?query=upxupx.exe-deasyre.exe再查一次,避免多重壳。逆向分析ida搜索字符串,shift+F12是flag的第2部分,现在查找第一部分。打开反汇编子......
  • Autofac资料
    IoC容器Autofac之实例引入(一)   IoC容器Autofac之IOC/DI基本概念(二)    IoC容器Autofac正篇之简单实例     IoC容器Autofac之实例优化(三)IoC容器Autofac正篇之类型注册(四)   IoC容器Autofac正篇之解析获取(五)     IoC容器Autofac正篇之依......
  • 【翻译】RISC-V裸机编程指南(Bare metal programming with RISC-V guide)
    RISC-V裸机编程指南(BaremetalprogrammingwithRISC-Vguide)作者:Follow@popovicu94原文链接:https://popovicu.com/posts/bare-metal-programming-risc-v/今天,我们将探讨如何为RISC-V架构的机器编写一个裸机程序。为了确保可复现,目标平台选择为QEMUriscv64virt虚拟机......
  • 2023年最新!Tomcat8.5于win10环境下的安装配置
    2023年最新!Tomcat8.5于win10环境下的安装配置Tomcat官网导航目录2023年最新!Tomcat8.5于win10环境下的安装配置导航一、检查JDK二、下载Tomcat三、配置环境变量四、启动Tomcat一、检查JDK按下win+r输入cmd并回车,在命令行窗口输入java-version,若出现相关信息则可以继续,没有......
  • [题解][2021浙江CCPC] Fair Distribution
    题目描述给定两个数n,m,每次操作可以让n-1或者m+1,求使m%n==0的最少操作数量。题解设进行n-t次操作,使n变成t。若m%t不为0,此时的操作数量为:n-t+t-m%t。若m%t==0,操作数量为n-t。那么只需要枚举t就可以解决此题。但会发现t的范围从1-n过大,考虑将t的范围限制在1-sqrt(m),且每次分别......