Запустите команду MS DOS "attrib" как процесс (C #) - PullRequest
0 голосов
/ 03 мая 2011

Я пытаюсь скрыть папку с C # с помощью команды attrib MSDOS.

Пока я могу это сделать, написав команду "attrib" + аргументы в командном файле, запустив этот файл с помощью Process.Start(), а затем удалив его. Мне было интересно, могу ли я сделать это прямо из C #?

Вот то, что я пробовал до сих пор ... (код ниже не работает)

    public static void hideFolder(bool hide, string path)
    {
        string hideOrShow = (hide) ? "+" : "-";
        Process.Start("attrib " + hideOrShow + "h " + hideOrShow + "s \"" + path + "\" /S /D");
    }

Любая помощь будет оценена! Thanx!

Ответы [ 4 ]

7 голосов
/ 03 мая 2011

То, что вы просили:

string hideOrShow = (hide) ? "+" : "-";
Process.Start("cmd /c attrib " + hideOrShow + "h " + hideOrShow + "s \"" + path + "\" /S /D");

Что вы должны сделать вместо этого:

File.SetAttributes(path, FileAttributes.Hidden);
1 голос
/ 03 мая 2011

C # делает это действительно легко - идея заключается в том, что вы получаете текущие атрибуты файлов (File.GetAttributes ()), а затем добавляете атрибут Hidden перед вызовом File.SetAttributes ()

проверьте ниже, это сделает c: \ blah скрытым

static void Main(string[] args)
{
    FileAttributes oldAttributes = File.GetAttributes(@"c:\blah");
    File.SetAttributes(@"c:\blah", oldAttributes | FileAttributes.Hidden);
}

чтобы удалить скрытый атрибут, вам нужно удалить скрытый атрибут

static void Main(string[] args)
{
    FileAttributes newAttributes = File.GetAttributes(@"c:\blah");
    newAttributes = newAttributes & (~FileAttributes.Hidden);

    File.SetAttributes(@"c:\blah", newAttributes);
}
1 голос
/ 03 мая 2011

Первым параметром Process.Start () должно быть имя исполняемого файла или документа. Вам нужно будет передать два параметра, например:

Process.Start("attrib.exe", hideOrShow + "h " + hideOrShow + "s \"" + path + "\" /S /D");

Кроме того, хотя attrib.exe будет работать при непосредственном вызове, большинство людей передают интерпретатор команд такого типа в стиле DOS (который также работает для встроенных команд и т. Д.)

Process.Start("cmd.exe", "/c attrib " + restOfTheArguments);
0 голосов
/ 03 мая 2011

В чем ошибка? Почему бы не использовать http://msdn.microsoft.com/en-us/library/system.io.filesysteminfo.attributes.aspx?

...