【发布时间】:2014-05-18 03:34:14
【问题描述】:
我一直纠结于如何验证目录是否存在以及如果存在则搜索特定文件。我进行了各种尝试,但到目前为止,我最大的障碍是通过访问修饰符维护安全性,同时保留我正在尝试完成的模块化特性。 以下代码的目标:
- 获取用户的驱动器以搜索特定目录。
- 搜索驱动器以找到用户的 Steam 目录。
- 寻找各种可执行文件;在这种情况下,三个最新的上古卷轴游戏。
- 一旦检测到并验证,执行各种操作(启动、检查问题等)
是的,我知道这些东西已经存在,但我只是想了解如何执行这种性质的任务。请随意就应该更改的内容提出建议和建设性的意见,所有其他内容将被忽略。
private void button1_Click(object sender, EventArgs e)
{
string[] drives = Directory.GetLogicalDrives();
foreach (string d in drives)
{
TW_Detection.IDetection.arLoop((File.Exists(d + sd + g)) ? MessageBox.Show(gn + " has been detected in " + d + sd + g).ToString() : MessageBox.Show("The game was not detected!").ToString());
}
}
}
}
下一段代码是我尝试以各种方式创建最短的方法来执行一系列自动目录搜索以查找可执行文件。
#region initialDetection
public class initialDetection
{
private string[] games = { "morrowind\\Morrowind.exe", "oblivion\\Oblivion.exe", "skyrim\\TESV.exe" };
private string[] games_names = { "The Elder Scrolls III: Morrowind", "The Elder Scrolls IV: Oblivion", "The Elder Scrolls V: Skyrim" };
private string[] steamDirectories = { "Program Files\\steam\\steamapps\\common", "Program Files (x86)\\steam\\steamapps\\common", "steam\\steamapps\\common" };
private void arLoop()
{
for (int i = 0; i < 2; i++)
{
string g = games[i];
string gn = games[i];
}
for (int i = 0; i < 2; i++)
{
string sd = steamDirectories[i];
}
}
}
#endregion
#region initialDetection
public class gameDetection : steamDetection
{
private string[] games = { "morrowind\\Morrowind.exe", "oblivion\\Oblivion.exe", "skyrim\\TESV.exe" };
private string[] games_names = { "The Elder Scrolls III: Morrowind", "The Elder Scrolls IV: Oblivion", "The Elder Scrolls V: Skyrim" };
public partial void arLoop()
{
for (int i = 0; i < 2; i++)
{
string g = games[i];
string gn = games_names[i];
}
}
}
#endregion
#region precompileDetection
public class precompileDetection : gameDetection
{
static string completeDirectory()
{
arLoop();
}
}
#endregion
#region steamDetection
public class steamDetection
{
private string[] steamDirectories = { "Program Files\\steam\\steamapps\\common\\", "Program Files (x86)\\steam\\steamapps\\common\\", "steam\\steamapps\\common\\" };
public partial void arLoop()
{
for (int i = 0; i < 2; i++)
{
string sd = steamDirectories[i];
}
}
}
#endregion
#region Detection Interface
public interface IDetection
{
void arLoop();
}
#endregion
}
是的,我意识到这段代码非常混乱,并且包含很多不必要的和损坏的解决方案,这是我的实验结果。问题在于能够使用检测结果显示在一个消息框中,告诉用户游戏没有被检测到,或者它已经检测到然后显示游戏的名称已经被检测到。
【问题讨论】:
-
根据经验:您几乎从不想要“长版”。让您的问题简短、中肯,并包含所有(且仅)相关的代码/信息。
-
Stackoverflow 是一个问答网站,因此请编辑您的帖子以明确您的问题。
-
@JeroenVannevel sccee.org