簡體   English   中英

在 C# 中以編程方式隱藏目錄

[英]Hiding Directories Programmatically in C#

我想在 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)
        {

        }
    }
}

這與我之前在這里創建的對話框一致。 輸入密碼后顯示的兩個按鈕用於顯示和隱藏該目錄。

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; 重復您將每第二次打開和關閉隱藏屬性。

這是使其隱藏(使其完全不可見)並再次顯示的代碼。

這是隱藏文件夾:

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");

您正在檢索屬性,而不是保存這些更改。

使用它來設置它們

            File.SetAttributes(path, FileAttributes.Hidden);

好吧,最近在我的小組中提出了一個與此非常相似的問題。

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

} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM