如何在 IO 函数的路径中使用 %username% 通配符

Posted

技术标签:

【中文标题】如何在 IO 函数的路径中使用 %username% 通配符【英文标题】:How to use %username% wildcard in paths for IO functions 【发布时间】:2021-07-16 16:59:07 【问题描述】:

我想要一个文件夹,其中包含每个访问它的用户的文件夹。

C:\bla\blabla\user1 C:\bla\blabla\user2 等等

如何在 .NET 中使用 Windows %username% 通配符来执行此操作?

这个,例如:

IO.Directory.CreateDirectory("C:\bla\blabla\%username%")

只给我一个文件夹,名字正好是“C:\bla\blabla\%username%\”

【问题讨论】:

添加找到这些%stuff% 占位符的代码,提取stuff,通过Environment.GetEnvironmentalVariable 提供它,并插入解析的值,并进行适当的错误处理。你可以做到这一点,例如Regex.Replace(input, @"%(\w+)%", m => Environment.GetEnvironmentVariable(m.Groups[1].Value)) 打开 cmd.exe 并输入 > Set 给出环境变量列表。使用类似这样的获取变量:string username = Environment.GetEnvironmentVariable("username"); 将这些数据存储在每个用户的 AppData 下的文件夹中不是更好吗? a) 数据对每个用户都是私有的,并成为他们个人资料的一部分,b) 您可以通过 %AppData%\yourappname 简单地访问它。如果您注意到,这就是大多数应用程序执行此类操作的方式,这也是 MS 推荐的针对每用户数据的方式。他们还可能在用户的 Documents 文件夹下创建一个文件夹,用于存放与用户可能真正想要查看和查找的应用程序相关的内容(而 AppData 通常用于设置和此类内容。) @ADyson 通常是的,在这种情况下,他们只是碰巧需要一个文件夹,每个文件夹都位于共享位置。 【参考方案1】:

%username% 是 Windows 中的环境变量,返回当前用户的用户名。

VB.NET 为我们提供了做同样事情的属性,Environment.UserName: https://docs.microsoft.com/en-us/dotnet/api/system.environment.username

这是一个将它与 Path.Combine 一起使用的示例:https://docs.microsoft.com/en-us/dotnet/api/system.io.path.combine

IO.Directory.CreateDirectory(IO.Path.Combine("C:\bla\blabla", Environment.UserName))

【讨论】:

【参考方案2】:

不同的方式

    Dim userNM As String = System.Security.Principal.WindowsIdentity.GetCurrent.Name
    userNM = userNM.Substring(userNM.IndexOf("\"c) + 1) 'remove domain

    userNM = Environment.GetEnvironmentVariable("username")

    userNM = Environment.UserName

    userNM = My.User.Name
    userNM = userNM.Substring(userNM.IndexOf("\"c) + 1) 'remove domain

【讨论】:

以上是关于如何在 IO 函数的路径中使用 %username% 通配符的主要内容,如果未能解决你的问题,请参考以下文章

在套接字io函数中重用变量

如何在托管的 ASP.NET Web API 中使用 System.IO.File 提供相对路径?

如何使用正则表达式(或 C# 函数)在一个变量中剪切 TEXT MESSAGE 并从此文本中剪切第二个变量 USERNAME?

std::ifstream 构造函数只接受绝对路径?

使用http://username.github.io免费建站

如何在 californium CoAP 服务器中使用路径变量?