¿Cómo elimino un directorio con archivos de solo lectura en C #?

Necesito eliminar un directorio que contiene archivos de solo lectura. Qué enfoque es mejor:

UtilizandoDirectoryInfo.Delete() o

ManagementObject.InvokeMethod("Delete")?

ConDirectoryInfo.Delete(), Tengo que desactivar manualmente el atributo de solo lectura para cada archivo, peroManagementObject.InvokeMethod("Delete") no parece necesitarlo. ¿Hay alguna situación en la que uno sea más preferible al otro?

Código de muestra (test.txt es de solo lectura).

Primera forma:
DirectoryInfo dir = new DirectoryInfo(@"C:\Users\David\Desktop\");
dir.CreateSubdirectory("Test");

DirectoryInfo test = new DirectoryInfo(@"C:\Users\David\Desktop\Test\");
File.Copy(@"C:\Users\David\Desktop\test.txt", @"C:\Users\David\Desktop\Test\test.txt");
File.SetAttributes(@"C:\Users\David\Desktop\Test\test.txt", FileAttributes.Archive);
test.Delete(true);
Segunda forma:
DirectoryInfo dir = new DirectoryInfo(@"C:\Users\David\Desktop\");
dir.CreateSubdirectory("Test");

DirectoryInfo test = new DirectoryInfo(@"C:\Users\David\Desktop\Test\");
File.Copy(@"C:\Users\David\Desktop\test.txt", @"C:\Users\David\Desktop\Test\test.txt");

string folder = @"C:\Users\David\Desktop\Test";
string dirObject = "Win32_Directory.Name='" + folder + "'";
using (ManagementObject managementObject = new ManagementObject(dirObject))
{
    managementObject.Get();
    ManagementBaseObject outParams = managementObject.InvokeMethod("Delete", null,
    null);
    // ReturnValue should be 0, else failure
    if (Convert.ToInt32(outParams.Properties["ReturnValue"].Value) != 0)
    {
    }
}

Respuestas a la pregunta(11)

Su respuesta a la pregunta