【问题标题】:Hiding Directories Programmatically in C#在 C# 中以编程方式隐藏目录
【发布时间】:2009-06-12 05:04:31
【问题描述】:

我想在 Windows Vista 中隐藏一个目录。只是从视图中没有完全隐藏。就像您从文件夹选项中设置的一样。 我尝试了一些我看到的例子。只是我稍微修改了一下..

这是我所有的代码组合。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class hideme : Form
    {
        public hideme()
        {
            InitializeComponent();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (PasswordTextBox.Text == "test")
            {
                EnableButton.Visible = true;
                DisableButton.Visible = true;
            }
            else
            {
                MessageBox.Show("Wrong", "Attention");
                Application.Exit();
            }
        }


        private void EnableButton_Click(object sender, EventArgs e)
        {
            //System.IO.FileInfo dir = new System.IO.FileInfo("C:\\Users\\logickills\\Pictures\\system");
            string path = "C:\\Users\\chris\\Pictures\\system";
            FileInfo FIh1 = new FileInfo(Environment.CurrentDirectory + @"\Files\File2.txt");
            FIh1.Attributes = FileAttributes.Hidden;
        }

        private void DisableButton_Click(object sender, EventArgs e)
        {

        }

        private void PasswordTextBox_TextChanged(object sender, EventArgs e)
        {

        }
    }
}

这与我之前创建的对话框 here 一起使用。 输入密码后显示的两个按钮用于显示和隐藏该目录。

【问题讨论】:

  • 您能否更清楚地说明您的问题?你的例子行不通吗?
  • 不知道隐藏文件夹有多实用!您的意思是“以编程方式”吗?
  • @matt:我也想知道:p
  • @matt:你太搞笑了!我现在是 ROFL。

标签: c# directory


【解决方案1】:

Attribute 属性是属性的组合,因此您需要将 Hidden 属性与该项目已有的任何属性相结合:

FIh1.Attributes = FIh1.Attributes  | System.IO.FileAttributes.Hidden;

如果你想删除它,你可以使用以下代码:

if ((FIh1.Attributes & System.IO.FileAttributes.Hidden) == System.IO.FileAttributes.Hidden)
{
    FIh1.Attributes = FIh1.Attributes ^ System.IO.FileAttributes.Hidden;
}

如果您反复调用FIh1.Attributes = FIh1.Attributes ^ System.IO.FileAttributes.Hidden;,您将每秒钟打开和关闭一次隐藏属性。

【讨论】:

  • 它说我可能缺少命名空间
  • 为类型名称添加了命名空间。另一种选择是“使用 System.IO;”在代码文件的顶部。
  • 它仍然不会隐藏目录。不过现在一切都被识别了。
  • 您也可以使用 |= 运算符 (FIh1.Attributes |= System.IO.FileAttributes.Hidden;)
【解决方案2】:

您正在检索属性,而不是保存这些更改。

用它来设置它们

            File.SetAttributes(path, FileAttributes.Hidden);

【讨论】:

    【解决方案3】:

    这是隐藏(使其完全不可见)并再次显示的代码。

    这是隐藏文件夹:

    string path = @"c:\folders\"; 
    DirectoryInfo di = Directory.CreateDirectory(path);
    di.Attributes = FileAttributes.Directory | FileAttributes.Hidden;           
    MessageBox.Show("archivo escondido");
    

    这是为了再次显示文件夹

    string path = @"c:\folders\"; 
    DirectoryInfo di = Directory.CreateDirectory(path);
    di.Attributes = FileAttributes.Directory | FileAttributes.Normal;
    MessageBox.Show("archivo mostrado");
    

    【讨论】:

      【解决方案4】:

      嗯,最近在my Group 上提出了一个与此非常相似的问题。

      DirectoryInfo 类公开了一个“Attributes”属性,它是 FileAttributes 枚举上的一个 Flags 枚举。您应该注意,目录基本上是一个具有特殊属性的文件 - “目录”。因此,您不应该清除该属性,而是 您应该始终附加到现有的枚举值或从中删除。

      这是一个非常简单的控制台应用程序来演示这个概念:


      class Program 
      { 
        static void Main(string[] args) 
        { 
          string input = args[0]; 
          if(input == "hide") 
          { 
            ToggleHidden(true); 
          } 
          else if(input == "reveal") 
          { 
            ToggleHidden(false); 
          } 
        } 
      
      
        private static void ToggleHidden(bool hide) 
        { 
          DirectoryInfo d = new DirectoryInfo(@"C:\MySecretFolder"); 
          if(d.Exists) 
          { 
            FileAttributes atts = d.Attributes; 
            if(hide == true) 
            { // Hide the folder. 
              // Append Hidden attribute only if not already set. 
              if((atts & FileAttributes.Hidden) != FileAttributes.Hidden) 
                atts |= FileAttributes.Hidden; 
            } 
            else 
            {  // Show the folder. 
              // Remove Hidden attribute if set. 
              if((atts & FileAttributes.Hidden) == FileAttributes.Hidden) 
                atts &= ~FileAttributes.Hidden; 
            } 
      
      
            d.Attributes = atts; 
          } 
        } 
      
      } 
      

      【讨论】:

      • 请注意-System.IO命名空间要在上面的代码示例中导入。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多