Как проверить на C#, если конкретный путь указан в каталоге в «Program Files»?Проверьте, находится ли путь в программных файлах
C: \ Program Files \ someDir ... -> в Program Files
D: \ Apps \ someDir ... -> не в Program Files
Спасибо!
Как проверить на C#, если конкретный путь указан в каталоге в «Program Files»?Проверьте, находится ли путь в программных файлах
C: \ Program Files \ someDir ... -> в Program Files
D: \ Apps \ someDir ... -> не в Program Files
Спасибо!
Вы можете проверить путь в ProgramFiles (x86), используя код ниже:
string path = "yourpath";
var programfileX86 = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86);
if (path.IndexOf(programfileX86, StringComparison.OrdinalIgnoreCase) >= 0)
{
//Found path
}
Я никогда не знал о перечислении 'Environment.SpecialFolder'. Очень приятное предложение. –
@JonSenchyna Надеюсь, это поможет –
Извините, но есть встречный пример: «C: \ Program Files (x86) 123 \ Test« нет в »C: \ Program Files (x86)« –
Прежде всего вам нужно получить путь к файлам программ. Вы можете сделать это с System.Environment:
var programFilesPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles);
Если вы хотите 32 разрядную программу файлы путь вы бы просто изменить специальную папку, которую вы ищете (System.Environment.SpecialFolder.ProgramFilesX86). Затем я сделаю a:
var isInProgramFiles = myPath.ToLower().Contains(programFilesPath.ToLower());
Это должно дать вам 90% пути туда хотя бы! Удачи!
EDIT/Sanitize Примечание
В качестве примечания - есть ситуации, в которых вы можете иметь действительный вход и это еще не соответствуют. Например, используя «/» вместо «\». Если вы хотите, чтобы вы правильно обрабатывали эти граничные случаи, вы можете создать объект «DirectoryInfo» из своей строки ввода, проверить, что это фактически папка, а также стандартизировать форматирование для нее. Этот код выглядит примерно так:
if (!System.IO.Directory.Exists(inputPath)) return false;
var checkPath = (new System.IO.DirectoryInfo(inputPath)).FullName;
В этом примере «inputPath» такой же, как «myPath» был выше. Это должно сделать умеренно хорошую работу по дезинфекции материалов. Удачи!
Еще раз, пример счетчика: «C: \ Program Files (x86) 123 \ Test», который не находится в «C: \ Program Files (x86)»; Другая проблема заключается в том, что «C:/Program Files (x86)/Test» (обратите внимание на косые черты \ и /) должны быть в «C: \ Program Files (x86)» –
Для таких ситуаций - или где находится папка, будучи проверенным, является сетевым ресурсом и сопоставленным диском, который вы правы, это не будет идеальным. Вот почему я сказал 90% пути. Вероятно, необходима некоторая входная санитария (или OP может использовать объект «DirectoryInfo», чтобы сделать это для вас). Я добавлю короткую заметку об этом –
Если у вас есть переменная пути:
string path = "/* whatever path */";
Вы можете проверить, если он находится в папке subfolder
таким образом:
path.IndexOf('\\' + subfolder + '\\') != -1
Обратите внимание, что в более сложных случаях ..
может Reve к.т. вас из поддиректории, что означает, что вы не в папке f2
если у вас есть что-то вроде этого:
"\\base_on_drive\\subfolder\\f1\\f2\\..\\a_file.txt"
..
будет ударное вас обратно в это родительская папка f1
.
if (path.Contains(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)) || (path.Contains(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)))
{
}
Путь не будет равен программные файлы. Путь - это * внутри * программные файлы ... –
@drew_w Спасибо, я редактировал свой код. – Guilherme
Предполагая, что ваша программа может быть запущена внутри 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
.
Заслуга Toan Nguyen для кода, чтобы получить каталог ProgramFiles:
Там ты некоторые interseting и тонких проблем с проблемой:
"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
Пробовали ли вы что-нибудь? Как получить путь в виде строки и проверить, содержит ли он «файлы программы»? –
Немного непонятно. Вы говорите, что с учетом определенного каталога вы хотите проверить, существует ли он в корневом каталоге Program Files? – Yuck