2009-06-12 8 views
2

Je souhaite créer un répertoire caché dans Windows Vista. Pas complètement caché juste de la vue. Comme vous définissez à partir des options de dossier. J'ai essayé quelque chose dans le sens d'un exemple que j'ai vu. Seulement je l'ai légèrement modifié.Masquage des répertoires en C#

Voici tout mon code combiné.

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) 
     { 

     } 


    } 
} 

Cela va de pair avec la boîte de dialogue je créais plus tôt here. Les deux boutons affichés après la saisie du mot de passe permettent d'afficher et de masquer ce répertoire.

Merci encore SO.

(Désolé pour autant de postes que je veux terminer ce programme: D)

+0

Pourriez-vous préciser plus clairement votre question? Votre exemple ne fonctionne pas? – cbp

+0

Non ne fonctionne pas –

+3

Je ne sais pas comment c'est pragmatique de cacher un dossier! Voulez-vous dire "par programme"? –

Répondre

4

La propriété d'attribut est une combinaison d'attributs, vous aurez donc besoin de combiner l'attribut caché avec de tous les attributs l'élément a déjà a obtenu:

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

Si vous voulez le supprimer, vous pouvez utiliser le code suivant:

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

Si vous appelez FIh1.Attributes = FIh1.Attributes^System.IO.FileAttributes.Hidden; à plusieurs reprises, vous activez et désactivez l'attribut caché toutes les deux secondes.

+0

Il est dit qu'il me manque un espace de noms –

+0

Ajout d'espaces de noms aux noms de types. Une autre option consiste à mettre "using System.IO;" en haut du fichier de code. –

+0

Il ne cachera toujours pas le répertoire. Tout est reconnu maintenant cependant. –

2

Vous récupérez les attributs sans sauvegarder ces modifications.

Utilisez cette option pour les mettre

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

Eh bien, une question très semblable à celui-ci a été demandé sur my Group récemment.

La classe DirectoryInfo expose une propriété "Attributes" qui est une énumération Flags sur l'énumération FileAttributes. Vous devriez noter qu'un répertoire est essentiellement un fichier avec un attribut spécial - "Répertoire". Par conséquent, vous ne devez pas effacer cet attribut, vous devez toujours ajouter à la valeur énumérée existante ou supprimer de ce dernier.

est ici une simple application console pour démontrer le concept:


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

Veuillez noter - Espace de noms 'System.IO' à importer dans l'exemple de code ci-dessus. – Cerebrus

2

Aquien le SIRVA ahi les va el codigo, de COME masquer (hacerle totalmente invisible), y visible

la carpera: salut, j'espère que ces codes peuvent aider n'importe qui

à cacher- esto es para Esconder el dossier

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

pour montrer again- esto es para el mostrar dossier NuevaMente

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

En anglais s'il vous plaît – Linger