net info extension exceptions c# .net file file-attributes

c# - info - ¿Cómo eliminar un único atributo(por ejemplo, solo lectura) de un archivo?



fileinfo c# (7)

Desde MSDN : puedes eliminar cualquier atributo como este

(pero la respuesta de @ sll solo para ReadOnly es mejor solo para ese atributo)

using System; using System.IO; using System.Text; class Test { public static void Main() { string path = @"c:/temp/MyTest.txt"; // Create the file if it exists. if (!File.Exists(path)) { File.Create(path); } FileAttributes attributes = File.GetAttributes(path); if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) { // Make the file RW attributes = RemoveAttribute(attributes, FileAttributes.ReadOnly); File.SetAttributes(path, attributes); Console.WriteLine("The {0} file is no longer RO.", path); } else { // Make the file RO File.SetAttributes(path, File.GetAttributes(path) | FileAttributes.Hidden); Console.WriteLine("The {0} file is now RO.", path); } } private static FileAttributes RemoveAttribute(FileAttributes attributes, FileAttributes attributesToRemove) { return attributes & ~attributesToRemove; } }

Digamos que un archivo tiene los siguientes atributos: ReadOnly, Hidden, Archived, System . ¿Cómo puedo eliminar solo un atributo? (por ejemplo ReadOnly)

Si uso:

Io.File.SetAttributes("File.txt",IO.FileAttributes.Normal)

elimina todos los atributos.


Para una solución de una línea (siempre que el usuario actual tenga acceso para cambiar los atributos del archivo mencionado) aquí es cómo lo haría:

VB.Net

Shell("attrib file.txt -r")

el signo negativo significa remove y el r es de solo lectura. si quieres eliminar otros atributos también, harías:

Shell("attrib file.txt -r -s -h -a")

Eso eliminará los atributos de Sólo lectura, Archivo de sistema, Oculto y Archivar.

Si desea devolver estos atributos, aquí está cómo:

Shell("attrib file.txt +r +s +h +a")

El orden no importa.

DO#

Process.Start("cmd.exe", "attrib file.txt +r +s +h +a");

Referencias


Respondiendo a su pregunta en el título con respecto al atributo ReadOnly :

FileInfo fileInfo = new FileInfo(pathToAFile); fileInfo.IsReadOnly = false;

Para controlar usted mismo cualquier atributo, puede usar el método MSDN . El enlace también proporciona un ejemplo.


Utilizar esta:

private static FileAttributes RemoveAttribute(FileAttributes attributes, FileAttributes attributesToRemove)

Lea los detalles aquí en MSDN: MSDN


/// <summary> /// Addes the given FileAttributes to the given File. /// It''s possible to combine FileAttributes: FileAttributes.Hidden | FileAttributes.ReadOnly /// </summary> public static void AttributesSet(this FileInfo pFile, FileAttributes pAttributes) { pFile.Attributes = pFile.Attributes | pAttributes; pFile.Refresh(); } /// <summary> /// Removes the given FileAttributes from the given File. /// It''s possible to combine FileAttributes: FileAttributes.Hidden | FileAttributes.ReadOnly /// </summary> public static void AttributesRemove(this FileInfo pFile, FileAttributes pAttributes) { pFile.Attributes = pFile.Attributes & ~pAttributes; pFile.Refresh(); } /// <summary> /// Checks the given File on the given Attributes. /// It''s possible to combine FileAttributes: FileAttributes.Hidden | FileAttributes.ReadOnly /// </summary> /// <returns>True if any Attribute is set, False if non is set</returns> public static bool AttributesIsAnySet(this FileInfo pFile, FileAttributes pAttributes) { return ((pFile.Attributes & pAttributes) > 0); } /// <summary> /// Checks the given File on the given Attributes. /// It''s possible to combine FileAttributes: FileAttributes.Hidden | FileAttributes.ReadOnly /// </summary> /// <returns>True if all Attributes are set, False if any is not set</returns> public static bool AttributesIsSet(this FileInfo pFile, FileAttributes pAttributes) { return (pAttributes == (pFile.Attributes & pAttributes)); }

Ejemplo:

private static void Test() { var lFileInfo = new FileInfo(@"C:/Neues Textdokument.txt"); lFileInfo.AttributesSet(FileAttributes.Hidden | FileAttributes.ReadOnly); lFileInfo.AttributesSet(FileAttributes.Temporary); var lBool1 = lFileInfo.AttributesIsSet(FileAttributes.Hidden); var lBool2 = lFileInfo.AttributesIsSet(FileAttributes.Temporary); var lBool3 = lFileInfo.AttributesIsSet(FileAttributes.Encrypted); var lBool4 = lFileInfo.AttributesIsSet(FileAttributes.ReadOnly | FileAttributes.Temporary); var lBool5 = lFileInfo.AttributesIsSet(FileAttributes.ReadOnly | FileAttributes.Encrypted); var lBool6 = lFileInfo.AttributesIsAnySet(FileAttributes.ReadOnly | FileAttributes.Temporary); var lBool7 = lFileInfo.AttributesIsAnySet(FileAttributes.ReadOnly | FileAttributes.Encrypted); var lBool8 = lFileInfo.AttributesIsAnySet(FileAttributes.Encrypted); lFileInfo.AttributesRemove(FileAttributes.Temporary); lFileInfo.AttributesRemove(FileAttributes.Hidden | FileAttributes.ReadOnly); }


if ((oFileInfo.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) oFileInfo.Attributes ^= FileAttributes.ReadOnly;


string file = "file.txt"; FileAttributes attrs = File.GetAttributes(file); if (attrs.HasFlag(FileAttributes.ReadOnly)) File.SetAttributes(file, attrs & ~FileAttributes.ReadOnly);