提问人:Matthew2004 提问时间:11/10/2023 最后编辑:Mark RotteveelMatthew2004 更新时间:11/17/2023 访问量:60
在未知路径中查找目录 [已关闭]
Looking for a directory in an unknown path [closed]
问:
我正在 C# Windows 窗体中处理我的应用程序,但我无法弄清楚这一点。我需要从未知路径的目录中获取一个文件。我觉得我已经尝试了我能找到的一切,但没有任何效果,或者可能还没有人向我正确解释。
现在,我正在检查几个可选文件夹,但这仍然不够,因为这个目录@“C:\Battlestate Games\EFT\EscapeFromTarkov_Data\StreamingAssets\Windows\assets\content” 总是有不同的路径。
有没有人知道如何在不知道路径的情况下访问文件夹?EscapeFromTarkov_Data\blablabla\blabla
此外,这是一个游戏目录,而不是我的程序目录或 Windows 目录。如果你想知道,我的应用程序正在作为游戏的文件修改器,这就是为什么我要弄乱另一个视频游戏的文件。
答:
2赞
Henry Kwon
11/10/2023
#1
首先从可能的候选者中找到文件夹。EscapeFromTarkov_Data
我将它的父母分为两部分:
- 驱动器根(如
C:\
) - 在根和自身之间(如
EscapeFromTarkov_Data
Battlestate Games\EFT
)
using System.IO;
using System.Linq;
private string? GetDataPath()
{
string[] candidates = {
@"Battlestate Games\EFT",
@"Battlestate Games",
@"Tarkov",
// add more candidates here
};
// Retrieving drive roots, such as @"C:\" and @"D:\"
IEnumerable<string> roots =
DriveInfo.GetDrives()
.Where(d => d.DriveType == DriveType.Fixed)
.Select(d => d.Name);
// Matching every root and candidate, plus "EscapeFromTarkov_Data"
var paths =
from root in roots
from candidate in candidates
select Path.Combine(root, candidate, "EscapeFromTarkov_Data");
// Checking whether each of combination actually exists
foreach (var path in paths)
{
if (Path.Exists(path))
return path;
}
// If none of them exist...
return null;
}
然后,使用前面的方法获取路径,以及该路径的完整路径的其余部分。Combine()
// If GetDataPath() is null, the following "is" statement returns false.
// Otherwise, it returns true and the value is stored to dataPath.
if (GetDataPath() is string dataPath)
string esp_directory = Path.combine(
dataPath, @"StreamingAssets\Windows\...\bear_head_0.bundle"
);
else
Application.Exit();
评论
EnumerationOptions.RecurseSubdirectories
esp_directory