J'ai besoin de supprimer un répertoire qui contient des fichiers en lecture seule. L'approche qui est mieux: à l'aide de DirectoryInfo.Delete(), ou ManagementObject.InvokeMethod("Supprimer")? Avec DirectoryInfo.Supprimer, je dois l'éteindre manuellement l'attribut en lecture seule pour chaque fichier, mais ManagementObject.InvokeMethod("Supprimer") ne semble pas nécessaire. Est-il une situation où l'on est plus préférable à l'autre?
Exemple de code (test.txt est en lecture seule).
Première façon:
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);
Deuxième façon:
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)
{
}
}