Скрытие каталогов программно в C # - PullRequest
2 голосов
/ 12 июня 2009

Я хочу сделать каталог скрытым в 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)
        {

        }
    }
}

Это соответствует диалогу, который я создал ранее здесь . Две кнопки, которые отображаются после ввода пароля, предназначены для отображения и скрытия этого каталога.

Ответы [ 4 ]

4 голосов
/ 12 июня 2009

Свойство 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; несколько раз, вы будете включать и выключать скрытый атрибут каждый второй раз.

2 голосов
/ 03 декабря 2012

аквиен ле сирва ахи ле ва эль кодиго, де комо эскендер (hacerle невидимый totalmente), y видимый

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");
2 голосов
/ 12 июня 2009

Вы извлекаете атрибуты, а не сохраняете эти изменения никогда.

используйте это, чтобы установить их

            File.SetAttributes(path, FileAttributes.Hidden);
0 голосов
/ 12 июня 2009

Ну, вопрос, очень похожий на этот, был недавно задан на моя группа .

Класс DirectoryInfo предоставляет свойство «Attributes», которое является перечислением Flags в перечислении FileAttributes. Следует заметить, что каталог - это файл со специальным атрибутом - «каталог». Таким образом, вы не должны очищать этот атрибут, а Вы всегда должны добавлять к существующему перечисляемому значению или удалять из него.

Вот очень простое консольное приложение, демонстрирующее концепцию:


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

} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...