C # Как автоматически перейти в каталог {GUID}? - PullRequest
0 голосов
/ 14 декабря 2010

У меня есть программа, которая использует сторонний инструмент для создания текстового файла журнала.

Однако для этого инструмента требуется каталог точек восстановления Windows XP.Каталог, в котором хранятся точки восстановления, - это «C: \ System Volume Information_restore {GUID}».

Папка _restore {GUID} будет содержать все точки восстановления.Однако {GUID} являются абсолютно случайными числами и различны для каждого компьютера.Каталог «C: \ System Volume Information» обычно содержит только 1 папку, которая является папкой «_random {GUID}».

Поэтому есть возможность для программы на C # использовать любые коды или методы длявведите аргументы команды для инструмента?

Может кто-нибудь посоветовать, пожалуйста, коды?Спасибо!

Коды:

        Process process = new Process();
        process.StartInfo.FileName = @"C:\test\ftk\ripxp\ripxp.exe";
        // How to automatically navigate to the {GUID} folder?
        process.StartInfo.Arguments = @"-r C:\test\ftk\ntuser.dat -d C:\System Volume Information\_restore{GUID} -p runmru";
        process.StartInfo.CreateNoWindow = false;
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardOutput = true;
        process.StartInfo.RedirectStandardInput = true;
        process.StartInfo.RedirectStandardError = true;
        process.Start();

Сторонний инструмент (2008 г.р. Карви) Аргументы:

C:\>ripxp -r d:\cases\ntuser.dat -d d:\cases\svi -p userassist

Ответы [ 2 ]

1 голос
/ 14 декабря 2010

Этот код показывает, как получить последний созданный каталог _restore:

    static void Main(string[] args)
    {
        DirectoryInfo di = new DirectoryInfo(@"c:\System Volume Information");
        DirectoryInfo directoryInfo = null;
        foreach (var enumerateDirectories in di.GetDirectories("_restore*"))
        {
            if (directoryInfo == null || enumerateDirectories.CreationTime > directoryInfo.CreationTime)
            {
                directoryInfo = enumerateDirectories;
            }
        }
        if (directoryInfo != null)
        {
            Console.WriteLine(directoryInfo.FullName);
        }
        Console.ReadLine();
    }
0 голосов
/ 14 декабря 2010

Почему бы не запросить расположение этой папки и не просмотреть список каталогов, чтобы найти папку, начинающуюся с "_restore", а затем включить ее в свой аргумент?

DirectoryInfo directoryInfo = new DirectoryInfo(@"C:\System Volume Information\");
DirectoryInfo restoreFolder = directoryInfo.GetDirectories().FirstOrDefault(d => 
    d.Name.StartsWith("_restore"));

if (restoreFolder == null)
    throw new DirectoryNotFoundException();

Тогда вы сможете подключитьэто значение папки в ваш аргумент

process.StartInfo.Arguments = string.Format(
    @"-r C:\test\ftk\ntuser.dat -d C:\System Volume Information\{0} -p runmru", 
    restoreFolder.Name);
...