-2

exeファイルがあり、ドライブのどこにでも置くことができます。C# と WinForms を使用して、スキャンして存在するかどうかを確認するにはどうすればよいですか

このコードを試しましたが、正しく動作しませんでした

if (Directory.GetFiles(@"C:\", "MCRInstaller.exe", SearchOption.AllDirectories))
{
    // do something. 
}
4

2 に答える 2

2
List<string> files = Directory.EnumerateFiles(startFolder, "*.txt",
                                              SearchOption.AllDirectories).ToList();
于 2013-03-17T04:07:46.307 に答える
1

また、システム フォルダ (システム ボリューム情報、RECYCLER、Windows など) にアクセスすると例外がスローされることに注意してください。

以下のラムダのように、いくつかの除外を検討してください。

List<string> matches = new List<string>(); 
DirectoryInfo C = new DirectoryInfo("C:\\");
var rootFiles = C.GetFiles();
var rootDirs = C.GetDirectories("*", SearchOption.TopDirectoryOnly).Where(dir => !dir.Name.Equals("System Volume Information") && !dir.Name.Equals("RECYCLER") && !dir.Name.Equals("WINDOWS"));

foreach (var rf in rootFiles)
{
    if (rf.Name.Equals("MCRInstaller.exe"))
    {
        matches.Add(rf.FullName);
    }
}

foreach (var rdir in rootDirs)
{
    try
    {
        var dirFiles = rdir.GetFiles("*", SearchOption.AllDirectories);

        foreach (var aFile in dirFiles)
        {
            if (aFile.Name.Equals("MCRInstaller.exe"))
            {
                matches.Add(aFile.FullName);
            }
        }
    }
    catch (UnauthorizedAccessException err)
    {
        using (StreamWriter errLog = File.AppendText("errors.log"))
        {
            string dt = "[" + DateTime.Now + "]: ";
            errLog.Write(dt);
            errLog.Write(err.StackTrace);
        }
    }
}

foreach (string match in matches)
{
    //do some stuff with your list of matches
}
于 2013-03-17T04:34:29.063 に答える