如果特定路径是“Program Files”中的目录,我该怎样检查C#?
C:\ Program Files \ someDir ... - >在程序文件
中D:\ Apps \ someDir ... - >不在程序文件
中谢谢!
答案 0 :(得分:5)
您可以使用以下代码检查ProgramFiles(x86)中的路径:
string path = "yourpath";
var programfileX86 = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86);
if (path.IndexOf(programfileX86, StringComparison.OrdinalIgnoreCase) >= 0)
{
//Found path
}
答案 1 :(得分:1)
首先,您需要获取程序文件路径。您可以使用System.Environment执行此操作:
var programFilesPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles);
如果你想要32位程序文件路径,你只需要更改你要查找的特殊文件夹(System.Environment.SpecialFolder.ProgramFilesX86)。然后我会做一个包含:
var isInProgramFiles = myPath.ToLower().Contains(programFilesPath.ToLower());
那应该至少让你在90%的路上!祝你好运!
编辑/清理注释
作为旁注 - 有些情况下您可以拥有有效的输入,但这仍然不匹配。例如 - 使用“/”而不是“\”。如果要确保正确处理这些边界情况,可以从输入字符串创建“DirectoryInfo”对象,验证它实际上是一个文件夹,并标准化它的格式。该代码看起来像:
if (!System.IO.Directory.Exists(inputPath)) return false;
var checkPath = (new System.IO.DirectoryInfo(inputPath)).FullName;
在此示例中,“inputPath”与上面的“myPath”相同。这应该做一个适度的工作来消毒输入。祝你好运!
答案 2 :(得分:0)
如果您有路径变量:
string path = "/* whatever path */";
您可以通过以下方式检查文件夹是subfolder
:
path.IndexOf('\\' + subfolder + '\\') != -1
请注意,在更复杂的情况下,..
可能会使您退出子目录,这意味着如果您有类似的内容,则不在文件夹f2
中:
"\\base_on_drive\\subfolder\\f1\\f2\\..\\a_file.txt"
..
会让你回到它的父文件夹f1
。
答案 3 :(得分:0)
if (path.Contains(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)) || (path.Contains(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)))
{
}
答案 4 :(得分:0)
假设您的程序可能在ProgramFiles中运行,您可能希望得到您正在检查的任何路径的fullpath(如果您获得相对路径)。此外,C#有一个方便的SpecialFolder枚举,您可以使用它来获取ProgramFiles目录。
以下代码将采用路径,将其转换为完整路径,并检查是否可以在其中找到ProgramFiles目录。您可能希望添加一些错误处理(例如检查null
路径)。
static string programfileX86 = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86);
public bool IsInsideProgramFiles(string path)
{
// Get the fullpath in case 'path' is a relative path
string fullPath = System.IO.Path.GetFullPath(path);
return (fullPath.IndexOf(programfileX86, StringComparison.OrdinalIgnoreCase) >= 0);
}
注意:根据您运行代码的系统,您可能需要检查SpecialFolder.ProgramFiles
和SpecialFolder.ProgramFilesx86
。
要获得ProgramFiles目录的代码,请转到Toan Nguyen:
答案 5 :(得分:0)
该问题存在一些内部和微妙的问题:
"C:\PRogRAM FILES (x86)\Sample"
没问题"C:/PRogRAM FILES (x86)/Sample"
也可以"C:\Program Files (x86)MyData\Sample"
不正常守则:
public static Boolean PathIncludes(String path, String pathToInclude) {
if (String.IsNullOrEmpty(pathToInclude))
return false;
else if (String.IsNullOrEmpty(path))
return false;
String[] parts = Path.GetFullPath(path).Split(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar, Path.VolumeSeparatorChar);
String[] partsToInclude = Path.GetFullPath(pathToInclude).Split(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar, Path.VolumeSeparatorChar);
if (parts.Length < partsToInclude.Length)
return false;
for (int i = 0; i < partsToInclude.Length; ++i)
if (!String.Equals(parts[i], partsToInclude[i], StringComparison.OrdinalIgnoreCase))
return false;
return true;
}
public static Boolean InProgramFiles(String path) {
return PathIncludes(path, Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)));
}
//测试:
// Supposing that ProgramFilesX86 is "C:\Program Files (x86)"
InProgramFiles(@"C:\PRogRAM FILES (x86)\Sample"); // <- true
InProgramFiles(@"C:/PRogRAM FILES (x86)/Sample"); // <- true
InProgramFiles(@"D:/PRogRAM FILES (x86)/Sample"); // <- false
InProgramFiles(@"C:/PRogRAM FILES (x86)A/Sample"); // <- false