我正在编写一个 Mono 应用程序,并希望找到 Documents 文件夹的完整路径 - 例如/Users/johnsmith/Documents/
。实现这一目标的最佳方法是什么?
我的目标是检查 DirectoryInfo.FullName 是否是特殊文件夹之一。
这就是我正在做的事情(检查每个特殊文件夹的directoryInfo.FullName,如果它们相等):
DirectoryInfo directoryInfo = new DirectoryInfo("Directory path");
if (directoryInfo.FullName == Environment.GetFolderPath(Environment.SpecialFolder.Windows) ||
directoryInfo.FullName == Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles ||)
...
...
)
{
// directoryInfo is the special folder
}
Run Code Online (Sandbox Code Playgroud)
但还有很多特殊的文件夹(Cookies、ApplicationData、InternetCache 等)。有什么办法可以更有效地完成这项任务吗?
谢谢。
我希望能够做到这样的事情:
IO.Directory.Exists("%USERPROFILE%")
Run Code Online (Sandbox Code Playgroud)
原因是我想指定我的应用程序将使用的一个目录,作为配置文件中的纯文本.在某些情况下,我希望它嵌套在用户配置文件下,在这种情况下配置文件将读取如下内容:
...
LocalDbDirectory = %USERPROFILE%\Application Data\My Toolkit\
...
Run Code Online (Sandbox Code Playgroud)
或者我可能希望它在网络位置,在这种情况下它会读取如下内容:
...
LocalDbDirectory = N:\Common\My Toolkit Databases\
...
Run Code Online (Sandbox Code Playgroud)
所以我需要能够使用IO.Directory.Exists(...)等效方法来解释速记符号.
有任何想法吗?
我想system32
在32位Windows和SysWOW64
64位Windows 上获取路径路径.无论Environment.GetFolderPath(Environment.SpecialFolder.System)
和Environment.SystemDirectory
做工精细.我应该选择和使用哪一个?我使用的是.NET 2.0
这些命名空间中的魔术路径之间有什么区别:
Environment.SpecialFolder.LocalApplicationData
与
Application.LocalUserAppDataPath
和
Environment.SpecialFolder.ApplicationData
与
Application.CommonAppDataPath
等等...
令我非常懊恼的是,我必须使用VBS编写InstallShield 2010 LE自定义操作.我没有VBS经验所以我基本上把我找到的代码片段放在一起.
我需要保留Common Documents文件夹(CSIDL_COMMON_DOCUMENTS).它没有定义WScript.Shell.SpecialFolders
(尽管所有用户桌面都是).我发现了一些尝试链接到系统DLL的示例代码:
Private Declare Function SHGetFolderPath Lib "shfolder.dll" _
Alias "SHGetFolderPathA" _
(ByVal hwndOwner As Long, _
ByVal nFolder As Long, _
ByVal hToken As Long, _
ByVal dwReserved As Long, _
ByVal lpszPath As String) As Long
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在VbsEdit中运行它时,我在第一行得到以下错误:
Microsoft VBScript compilation error: Expected end of statement
有任何想法吗?
因为我在MSDN文档中找不到任何明确的说明:ProgramFilesX86
在32位系统上枚举值是什么回报?
请注意:在我的组织中,每当我想测试时,我都不能站起来.这就是我问社区的原因.我甚至无法访问32位ISO来构建虚拟机 - 所以请理解我在这个组织内部有一些限制.
在生产中我不知道他们是在运行32位还是64位系统,而且它可能是混合体.但是我知道操作系统列表.
获取正确的程序文件目录,以便我可以动态启动我的应用程序.
Program Files
目录中.Program Files (x86)
文件夹,但在32位系统上,它将使用标准Program Files
目录.谢谢大家!
我正在使用VS2013 Express for Desktop并使用Windows窗体.
我正在关注这个MSDN演练"使用Designer使用ListView和TreeView控件创建资源管理器样式界面".所以我试图让树视图从"MyComputer"级别开始,以便所有驱动器号都可供用户选择.
它适用于MyDocuments,如下所示:
DirectoryInfo info = new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));
Run Code Online (Sandbox Code Playgroud)
但是当我从自动完成中选择MyComputer时,它不起作用:
DirectoryInfo info = new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.MyComputer));
Run Code Online (Sandbox Code Playgroud)
我明白了:
mscorlib.dll中出现未处理的"System.ArgumentException"类型的异常附加信息:该路径不是合法格式.
这是令人惊讶的,因为"MyComputer"在自动完成中可用,但不像其他特殊文件夹那样工作.
谢谢.
更新: 谢谢ByteBlast和CodyGray.
在这里询问我应该做什么是不恰当的?
在 Windows 上,可以使用SHGetKnownFolderPath
or获取任何特殊文件夹路径SHGetSpecialFolder
(如果我没记错的话)。但是,我想要相反的,我有一个路径,想知道它属于哪个特殊文件夹(如果有)。我更喜欢这种方法,因为要找出给定的路径是否在特定的特殊文件夹中,我必须为所有用户枚举所有特殊文件夹,这有点难看,但如果没有其他方法,天空是极限:)
我搜索了它,但找不到任何有用的东西。那么 WinApi 是否有一个功能可以做到这一点?
谢谢。
由于 OneDrive 同步,我已将 Windows /Desktop 文件夹移动到其他位置。
结果,我指向的批处理和 Powershell 脚本%USERPROFILE%/Desktop
不再起作用。有没有另一种方法可以在不硬编码新路径的情况下获取我的桌面位置?
windows powershell batch-file environment-variables special-folders
special-folders ×11
c# ×6
windows ×6
.net ×3
winapi ×2
batch-file ×1
installer ×1
macos ×1
mono ×1
powershell ×1
system32 ×1
vbscript ×1
winforms ×1