Перенаправить результат команды List volume в список в c # - PullRequest
0 голосов
/ 31 мая 2018

Мне нужно разработать приложение (Windows Forms), которое облегчает пользователю действие по изменению буквы диска.Я знаю, как это сделать из cmd:

  • diskpart
  • Объем списка
  • Выбор объема X
  • Назначение буквы = K

Интерфейс для моего приложения должен выглядеть примерно так: Appearence of interface

Я знаю, как выполнять эти команды из c #, но я хотел бы показатьрезультат команды «Громкость списка» в моем списке, чтобы пользователь мог выбрать объем, который он хотел изменить, и нажать кнопку «ИЗМЕНИТЬ ПИСЬМО».

Мой вопрос заключается в том, как выполнить первое задание,Я имею в виду, показать результат объема списка в поле списка.

Вот мой код с тех пор:

        Process p = new Process();
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        p.StartInfo.CreateNoWindow = true;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.FileName = @"C:\Windows\System32\diskpart.exe";
        p.StartInfo.RedirectStandardInput = true;
        p.Start();
        p.StandardInput.WriteLine("list volume");

        string output = p.StandardOutput.ReadToEnd();

Я не вижу значения вывода при запуске программы,Спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

вы можете использовать DriveInfo, чтобы упростить получение текущих буклетов дисков, тогда добавление дисков в список просто:

drives = DriveInfo.GetDrives().ToList();
//Don't know the name of your listBox.
listBox.ItemsSource = drives;

После этого вы нажимаете Button, где хотите изменить информацию о драйвере.,Я не знаю, нужна ли вам буква диска или индекс буклета диска, поэтому этот код дает вам обоим.

private static void Btn_Click(object sender, System.Windows.RoutedEventArgs e)
{
    string driveLetter = (string)listBox.SelectedItem;
    int index = drives.FindIndex(x => x.Name == driveLetter);

    //Perform the work of changing the driveletter using index or driveletter

    drives = DriveInfo.GetDrives().ToList();
    listBox.ItemsSource = drives;
}

Я предполагаю, что вы уже знаете, как выполнить работу по замене буквы диска.

0 голосов
/ 31 мая 2018

Следующий код вернет вам список дисков.Ваш вопрос немного длинен, но вам нужно выполнить весь анализ строки, чтобы получить список дисков из этой строки.

Process process = new Process();
process.StartInfo.FileName = "diskpart.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
process.StandardInput.WriteLine("list volume");
process.StandardInput.WriteLine("exit");
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();


var op = output.Split(new string[] { "DISKPART>" }, 3, StringSplitOptions.RemoveEmptyEntries)[1].Split(new string[] { Environment.NewLine },10, StringSplitOptions.RemoveEmptyEntries);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...