启动MS DOS命令";attrib";as进程(C#)

启动MS DOS命令";attrib";as进程(C#),c#,dos,C#,Dos,我正试图使用MSDOS“attrib”命令隐藏一个带有C#的文件夹 现在,我可以通过在批处理文件中写入“attrib”命令+参数,使用Process.Start()运行该文件,然后删除它来实现这一点。我在想,我能直接从C#做吗 这是我到目前为止所尝试的。。。(下面的代码不起作用) 任何帮助都将被感激! 塔克斯 有什么错误吗?为什么不使用?您要求的: 你应该做的是: Process.Start()的第一个参数必须是可执行文件或文档的名称。您需要传入两个参数,如下所示: Process.Start(

我正试图使用MSDOS“attrib”命令隐藏一个带有C#的文件夹

现在,我可以通过在批处理文件中写入“attrib”命令+参数,使用
Process.Start()
运行该文件,然后删除它来实现这一点。我在想,我能直接从C#做吗

这是我到目前为止所尝试的。。。(下面的代码不起作用)

任何帮助都将被感激!
塔克斯

有什么错误吗?为什么不使用?

您要求的: 你应该做的是:
Process.Start()的第一个参数必须是可执行文件或文档的名称。您需要传入两个参数,如下所示:

Process.Start("attrib.exe", hideOrShow + "h " + hideOrShow + "s \"" + path + "\" /S /D");
此外,虽然直接调用attrib.exe可以工作,但大多数人会将这种DOS风格的命令传递给命令解释器(它也适用于内置命令等)

C#使这变得非常简单-其思想是让文件具有当前属性(File.GetAttributes()),然后在调用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);
}

为什么不直接使用File.SetAttributes呢?因为这样你仍然可以在窗口中看到文件和文件夹explorer@Andrej:如果用户启用了“显示隐藏的文件和文件夹”设置,我认为您没有什么可以做的。请重试,伙计。你看起来有点不对劲。这是完全相同的事情。可能的混淆-“显示隐藏的文件和文件夹”不显示系统文件-它们仅在“隐藏受保护的操作系统文件”也未选中时出现。实际上。attrib是C:\Windows\System32\attrib.exe,但您的方式仍然要好得多。@MichaelEdenfield:Oops。。。好久没见了,我都忘了对上面的文件.SetAttributes()要小心一点,这将做两件事-清除所有当前设置的属性(系统、只读等),并设置为隐藏。我在下面发布了一个小改动,以演示如何在隐藏中“屏蔽”,以便添加隐藏时保留任何现有属性。正如我所说,我使用的是windows 7(也在xp中测试过),我打开了“显示隐藏的文件和文件夹”,但这对我不起作用。。。但是,如果我使用attrib命令,那么文件(或文件夹)是隐藏的..嗯,对我有效(刚刚验证)-“显示隐藏的文件和文件夹”意味着您可以看到隐藏的文件,但它是灰色的。因此,如果应用了hidden属性,并且启用了“显示隐藏文件”,您应该可以看到该文件,但它应该是灰色的。我是唯一一个在使用attrib隐藏时看不到文件的人吗?:)我检查了是否启用了“显示隐藏文件”,当我使用attrib隐藏文件时,我看不到它们…您是否可以安装某种shell扩展?也许是背景变换器、主题程序或类似百叶窗的东西?这就是我需要的。。非常感谢!
Process.Start("attrib.exe", hideOrShow + "h " + hideOrShow + "s \"" + path + "\" /S /D");
Process.Start("cmd.exe", "/c attrib " + restOfTheArguments);
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);
}