2014-11-30 2 views
-1

У меня есть этот код:Для многих IF's. Есть ли способ лучше?

If CheckBox1.Checked = True Then 
      My.Computer.FileSystem.RenameFile("C:\Users\mario\Desktop\Dominio\1\Pc - S.txt", "Pc - S - A.txt") 
      'Sleep(2000) ' to sleep for 2 second 
      System.Threading.Thread.Sleep(2000) 
      My.Computer.FileSystem.RenameFile("C:\Users\mario\Desktop\Dominio\1\Pc - S - A.txt", "Pc - S.txt") 
     End If 

     If CheckBox2.Checked = True Then 
      My.Computer.FileSystem.RenameFile("C:\Users\mario\Desktop\Dominio\2\Pc - S.txt", "Pc - S - A.txt") 
      'Sleep(2000) ' to sleep for 2 second 
      My.Computer.FileSystem.RenameFile("C:\Users\mario\Desktop\Dominio\2\Pc - S - A.txt", "Pc - S.txt") 
     End If 

И это продолжается еще 24, если х. Мне нужно, чтобы они изменили имя в одно и то же время, а затем подождали две секунды и снова изменили его все время. Будет ли у меня 48 (24 + 24) IF?

Объяснение:

Im создавая супер простой способ shuting вниз компьютеры в моей школе. Вот моя идея (надеюсь, что вы можете понять)

я поставил программу на каждом компьютере в школе (в Regestry при старте), который выполняет следующие действия: (Atencion на самом деле не в языке программирования)

для (1) {

sleep 1000  // wait 1 sec 

if.FILE.EXISTS(\\domain\folder1\shutdown.txt) then{ 

    do: shutdown pc // if file exist it shutdowns the pc 

} 

}

Так что это делает, если есть файл в определенной директории в домене, shutsdown ПК. Я делаю это для 24 шт, поэтому мне нужно отключить их индивидуально, поэтому много папок. Так что я мог бы просто переименовать файлы вручную, но для 24 шт. Это большая работа. Поэтому я разрабатываю заявку, которая спрашивает меня, какие ПК я хочу отключить, а затем:

1: Переименовать файл.

2: Подождите 2 или более секунд (так что компьютеры в сети есть время, чтобы проверить, если есть такой файл)

3: переименовать файл обратно так, когда компьютер снова перезагрузится оно не выключится.

Вы получили то, что я пытаюсь сделать? И да, есть более ортодоксальные способы сделать это. но это действительно просто, и это скорее испытание, чем что-либо. (Позже мы будем использовать более подходящие способы сделать это и сделать другие варианты по сети)

+0

Где приходит это данные в первую очередь? Можете ли вы просто прочитать его из текстового поля или что-то еще? Можете ли вы создать массив этих имен файлов? – Brad

+1

Почему вы спите в течение 2 секунд после переименования файла? Это кажется крайне ненужным? – mason

+0

Я редактирую свое сообщение, чтобы объяснить проект. Подожди немного. – lemario

ответ

0

С той лишь разницей, что единственное число в пути к файлу, почему бы не сделать что-то вроде этого?

var dict = new Dictionary<CheckBox, string>(); 
dict.Add(CheckBox1, "1"); 
dict.Add(CheckBox2, "2"); 
//etc 

foreach (var kvp in dict) 
{ 
    if(kvp.Key.Checked == true) 
    { 
     My.Computer.FileSystem.RenameFile(String.Format("C:\Users\mario\Desktop\Dominio\{0}\Pc - S.txt", kvp.Value), "Pc - S - A.txt") 
    } 
} 

Мы создаем общий словарь для хранения ассоциации флажков в строке/номер, а затем цикл по словарю, проверяя значения. Мы используем строку формата (вместо этого вы можете использовать конкатенацию строк), чтобы вставить строку/число в строку пути к файлу.

Обратите внимание, что это на C#, поскольку я не программист VB. Синтаксис, вероятно, будет несколько отличаться.

+0

Хм, кажется, хорошая идея, но кто-то может «перевести», так сказать, на VB. Im preaty noob в VB. Но плохо попытайтесь найти способы сделать это спасибо :) – lemario

+0

Вы должны иметь возможность перевести его довольно прямо, если вы знаете что-нибудь о VB. Просто пройдите по строкам и преобразуйте синтаксис. – mason

+0

Да, я начал делать VB 2 дня назад, так что да. Это займет немного времени, но сделает это :) – lemario

0

Поскольку вы намерены удаленно отключать ПК, почему бы не закрыть их из своего кода, а не хакеры «создать файлы, а затем подождать 2 секунды»?

Опять же, это C#, но перевод должен быть достаточно прост:

var ComputerNames = new List<string>() {"Computer1", "Computer2", "Computer3"}; 

foreach(var pc in ComputerNames) 
{ 
    Process.Start("shutdown","-s -m \\\\" + pc); 
} 
+0

Это швы достаточно простые. Будет ли это работать, если я хочу закрыть все открытые программы? (программы не сервисы или процессы) – lemario

+0

Когда компьютер начинает процесс выключения, он посылает сигнал программе, что ПК выключается, и что программа должна очищаться и выходить. Это дает программе определенное количество времени, чтобы очистить, прежде чем она сильно убьет их. Хотя я считаю, что есть исключения (например, открытый несохраненный документ Notepad). Но это должно охватывать большинство случаев. – mason

+0

Я имел в виду, что я не хочу только выключать компьютер, но и закрывать все программы. Func. У процесса.Start() есть другие функции? – lemario

Смежные вопросы