以C#编程方式隐藏目录

时间:2009-06-12 05:04:32

标签: c# directory

我想在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一致。 输入密码后显示的两个按钮用于显示和隐藏该目录。

4 个答案:

答案 0 :(得分:4)

属性属性是属性的组合,因此您需要将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;,您将每隔一次打开和关闭隐藏属性。

答案 1 :(得分:2)

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

用它来设置它们

            File.SetAttributes(path, FileAttributes.Hidden);

答案 2 :(得分:2)

aquien le sirva ahi les va el codigo,de como esconder (hacerle invisible totalmente),y visible

la carpera: 嗨,我希望这些代码可以帮助任何人

隐藏 - esto es para esconder el folder

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

再次显示─  esto es para mostrar el folder nuevamente

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

答案 3 :(得分:0)

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

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

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


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; 
    } 
  } 

}