2009-06-12 4 views
2

Я хочу сделать каталог скрытым в Windows Vista. Не скрывается полностью из виду. Как и в настройках папки. Я пробовал что-то вроде строк, которые я видел. Только я немного изменил его.Скрывать каталоги программно в C#

Вот мой код в сочетании.

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. Две кнопки, которые отображаются после ввода пароля, предназначены для отображения и скрытия этого каталога.

Еще раз спасибо.

(Извините за столько постов, которые я хочу закончить эту программу: D)

+0

Не могли бы вы более четко на ваш вопрос? Ваш пример не работает? – cbp

+0

Nope не работает – 2009-06-12 05:09:17

+3

Я не знаю, насколько прагматично скрывать папку! Вы имели в виду "программно"? –

ответ

4

Свойство Атрибут является сочетание атрибутов, так что вам нужно будет совместить скрытый атрибут с тем, что атрибуты элемент уже есть получил:

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

+0

Он говорит, что может отсутствовать пространство имен – 2009-06-12 05:20:44

+0

Добавлены пространства имен к именам типов. Еще один вариант - поставить «using System.IO»; в верхней части файла кода. –

+0

Он по-прежнему не скрывает директорию. Однако все признается. – 2009-06-12 05:29:48

2

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

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

  File.SetAttributes(path, FileAttributes.Hidden); 
0

Ну, вопрос очень похож на этот был задан вопрос о my Group недавно.

Класс DirectoryInfo предоставляет свойство «Атрибуты», которое является перечислением флагов в перечислении 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; 
    } 
    } 

} 
+0

Обратите внимание - пространство имён 'System.IO' импортируется в приведенном выше примере кода. – Cerebrus

2

aquien ле SIRVA ИАГ ле ва эль Codigo, де Como esconder (hacerle невидимый Totalmente), у видимую

la carpera: привет, я надеюсь, что этот код может помочь любому

to hide- esto es para esconder эль папку

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

показать снова- Эсто эс пункт mostrar эль папки nuevamente

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

На английском языке пожалуйста – Linger

Смежные вопросы