Я пытаюсь найти исполняемые файлы для игр;однако некоторые из них являются вложенными (например, Ark: Survival Evolved) ( A: \ Steam Games \ steamapps \ common \ ARK \ ShooterGame \ Binaries \ Win64 \ ShooterGame.exe )
У меня естьпотратил целую вечность, пытаясь найти способ найти только исполняемые файлы, которые имеют отношение к делу.
Эта ссылка показывает игры, когда мы не проводим рекурсивный поиск.Он находит большинство, но не все .exe
Эта ссылка показывает рекурсивный поиск игр, но также показывает кучу исполняемых файлов / повторных файлов.
Изначально я пытался исключить "Папки bin,, binary, binaries, redist, но это не дало мне, например, Ark: Survival Evolved.
Я также рассмотрел возможность фильтрации файлов .exe по их размеру, но по Aperture.Тэг имеет QC_Eyes.exe на 3055 КБ, но Tomb Raider II.exe имеет размер 892 КБ.
Вот метод, который я использую, чтобы найти каталог установки steam и проверить libraryfolders.vdf.файл для расположения библиотеки.Сейчас я просто пишу в консоль, чтобы увидеть, какие выходы есть.
Если у кого-нибудь есть какие-либо советы о том, как мне найти нужные файлы для правильных игр, это было бы очень полезно.Спасибо
public void SearchSteam()
{
steamGameDirs.Clear();
string steam32 = "SOFTWARE\\VALVE\\";
string steam64 = "SOFTWARE\\Wow6432Node\\Valve\\";
string steam32path;
string steam64path;
string config32path;
string config64path;
RegistryKey key32 = Registry.LocalMachine.OpenSubKey(steam32);
RegistryKey key64 = Registry.LocalMachine.OpenSubKey(steam64);
foreach(string k32subKey in key32.GetSubKeyNames())
{
using (RegistryKey subKey = key32.OpenSubKey(k32subKey))
{
steam32path = subKey.GetValue("InstallPath").ToString();
config32path = steam32path + "/steamapps/libraryfolders.vdf";
if (File.Exists(config32path))
{
string[] configLines = File.ReadAllLines(config32path);
foreach(var item in configLines)
{
Console.WriteLine("32: " + item);
}
}
}
}
foreach(string k64subKey in key64.GetSubKeyNames())
{
using (RegistryKey subKey = key64.OpenSubKey(k64subKey))
{
steam64path = subKey.GetValue("InstallPath").ToString();
config64path = steam64path + "/steamapps/libraryfolders.vdf";
string driveRegex = @"[A-Z]:\\";
if (File.Exists(config64path))
{
string[] configLines = File.ReadAllLines(config64path);
foreach (var item in configLines)
{
Console.WriteLine("64: " + item);
Match match = Regex.Match(item, driveRegex);
if(item != string.Empty && match.Success)
{
string matched = match.ToString();
string item2 = item.Substring(item.IndexOf(matched));
item2 = item2.Replace("\\\\", "\\");
steamGameDirs.Add(item2);
}
}
steamGameDirs.Add(steam64path + "\\steamapps\\common\\");
}
}
}
foreach(string item in steamGameDirs)
{
string GameTitle;
string[] Executables = new string[0];
string[] steamGames = Directory.GetDirectories(item);
foreach (var dir in steamGames)
{
string title = dir.Substring(dir.IndexOf("\\common\\"));
string[] titlex = title.Split('\\');
title = titlex[2].ToString();
GameTitle = title;
Console.WriteLine("Title: " + GameTitle);
Console.WriteLine("Directory: " + dir);
string[] executables = Directory.GetFiles(dir, "*.exe", SearchOption.AllDirectories);
int num = 0;
foreach (var ex in executables)
{
//add "ex" to Executables[] if poss
Console.WriteLine(ex);
num++;
}
}
}
}