2010-11-14 47 views
5

Je voudrais être en mesure d'ajouter mes propres données/propriétés personnalisées aux dossiers existants sur NTFS, de sorte que si un dossier est déplacé, les propriétés se déplacent avec lui. Une solution serait de stocker un fichier dans le dossier pour contenir tout ce dont j'ai besoin ou que je veux.Peut-on ajouter des propriétés personnalisées aux dossiers NTFS?

Ce qui m'intéresse particulièrement, c'est de savoir s'il existe un moyen d'ajouter des propriétés personnalisées à l'objet système de fichiers du répertoire lui-même.

+0

http://stackoverflow.com/questions/1235150/ dsofile-c-api-ntfs-custo m-file-properties –

Répondre

2

Si vous vous sentez courageux ( ou idiot) peut-être un Alternative Data Stream serait une alternative.

Je ne sais pas si peut être appliqué à un répertoire, par opposition à un fichier normal et il est jonché de préoccupations qui doivent être pris en considération:

  1. Il n'y a pas de fenêtres outil standard utilisateur qui donne la liste (par exemple, ne peut pas afficher à partir de l'invite de l'explorateur ou cmd, mais peut être ouvert dans la plupart des programmes avec le nom correct).
  2. Ils ne seront pas transférés hors du système de fichiers NTFS.
  3. Ils peuvent également soulever des drapeaux AV, je ne sais pas.

Bonne codification.

+2

Rien d'idiot au sujet des flux de données alternatifs, ils sont conçus pour ce genre de chose. Et, oui, ils travaillent sur des répertoires. – snoone

1

Voici une façon C# pour afficher les propriétés de fichier personnalisées

DSOFile.OleDocumentPropertiesClass file = new DSOFile.OleDocumentPropertiesClass(); 

file.Open(@"C:\setup.exe", false, DSOFile.dsoFileOpenOptions.dsoOptionDefault); 

string key = "key1"; 

object value = "value1"; 

// Adds new custom property. 

file.CustomProperties.Add(key, ref value); 

// Go through existing custom properties. 

foreach (DSOFile.CustomProperty p in file.CustomProperties) 

{ 
Console.WriteLine("{0}:{1}", p.Name, p.get_Value().ToString()); 
} 

file.Close(true); 

Premier file.CustomProperties.Add (clé, valeur ref); en modifiant la clé d'attribut (la propriété, vous pouvez le modifier, voici ce qui suit. dans la clé que vous devriez mettre un des attribute_names suivants, qui sont ici décrits comme des constantes par des noms de leurs valeurs réelles

Const FILE_ATTRIBUTE_READONLY = 1 
Const FILE_ATTRIBUTE_HIDDEN = 2 
Const FILE_ATTRIBUTE_SYSTEM = 4 
Const FILE_ATTRIBUTE_DIRECTORY = &H10 
Const FILE_ATTRIBUTE_ARCHIVE = &H20 
Const FILE_ATTRIBUTE_ENCRYPTED = &H40 
Const FILE_ATTRIBUTE_NORMAL = &H80 
Const FILE_ATTRIBUTE_TEMPORARY = &H100 
Const FILE_ATTRIBUTE_SPARSE_FILE = &H200 
Const FILE_ATTRIBUTE_REPARSE_POINT = &H400 
Const FILE_ATTRIBUTE_COMPRESSED = &H800 
Const FILE_ATTRIBUTE_OFFLINE = &H1000 
Const FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = &H2000 

Ensuite, vous devez attribuer la valeur souhaitée à la constante, en valeur

ensuite voir chaque propriétés de chaque fichier qu'il leur montrer sur la ligne

Console.WriteLine("{0}:{1}", p.Name, p.get_Value().ToString());