/ / Usuń wszystkie pliki z katalogu z wyjątkiem folderu i jego zawartości - c #, .net, windows-mobile-6, compact-framework2.0

Usuń wszystkie pliki z katalogu z wyjątkiem folderu i jego zawartości - c #, .net, windows-mobile-6, compact-framework2.0

Próbuję usunąć wszystkie pliki z mojej pamięcikarta bez jej usuwania. Mogę zachować katalog, który podaję, ale nie jego zawartość przy pomocy mojego obecnego kodu. Po prostu pozostawia puste miejsce dane folderu, ponieważ usuwa wszystko w środku. Jak mogę go powstrzymać przed usunięciem tego folderu i jego zawartości?

private void button1_Click(object sender, EventArgs e)
{
ScanDirectory scanDirectory = new ScanDirectory();
scanDirectory.WalkDirectory(@"/Storage Card");
scanDirectory.WalkDirectory(@"/Application");
}

public class ScanDirectory
{
public void WalkDirectory(string directory)
{
WalkDirectory(new DirectoryInfo(directory));
}

private static void WalkDirectory(DirectoryInfo directory)
{
// Scan all files in the current path
foreach (FileInfo file in directory.GetFiles())
{
file.Attributes &= ~FileAttributes.ReadOnly;

var name = file.Name;
name = name.ToLower();
if (name != "test.txt")
{
file.Delete();
}
}
DirectoryInfo[] subDirectories = directory.GetDirectories();
foreach (DirectoryInfo subDirectory in subDirectories)
{
WalkDirectory(subDirectory);
subDirectory.Attributes &= ~FileAttributes.ReadOnly;

var name = subDirectory.Name;
name = name.ToLower();
if (name != "data")
{
subDirectory.Delete();
}
}
}
}

Odpowiedzi:

0 dla odpowiedzi № 1

Problem polega na tym, że wykonywane są wywołania funkcji rekursywnych: główna funkcja private static void WalkDirectory(DirectoryInfo directory) usuwa wszystkie pliki i jest wywoływana za każdym razem (nawet podczas analizy podkatalogu). Tutaj masz poprawkę, aby ten kod działał jak chcesz:

   private static void WalkDirectory(DirectoryInfo directory)
{
if (directory.Name.ToLower() != "data")
{
// Scan all files in the current path
foreach (FileInfo file in directory.GetFiles())
{
file.Attributes &= ~FileAttributes.ReadOnly;

var name = file.Name;
name = name.ToLower();
if (name != "test.txt")
{
file.Delete();
}
}

DirectoryInfo[] subDirectories = directory.GetDirectories();
foreach (DirectoryInfo subDirectory in subDirectories)
{
WalkDirectory(subDirectory);
subDirectory.Attributes &= ~FileAttributes.ReadOnly;

var name = subDirectory.Name;
name = name.ToLower();
if (name != "data")
{
subDirectory.Delete();
}
}
}
}

0 dla odpowiedzi nr 2
private static void WalkDirectory(DirectoryInfo directory)
{
if (directory.Name.ToLower() != "data")
{
// Scan all files in the current path
foreach (FileInfo file in directory.GetFiles())
{
file.Attributes &= ~FileAttributes.ReadOnly;

var name = file.Name;
name = name.ToLower();
if (name != "test.txt")
{
file.Delete();
}
}

DirectoryInfo[] subDirectories = directory.GetDirectories();
foreach (DirectoryInfo subDirectory in subDirectories)
{
WalkDirectory(subDirectory);
subDirectory.Attributes &= ~FileAttributes.ReadOnly;

var name = subDirectory.Name;
name = name.ToLower();
if (name != "data")
{
subDirectory.Delete();
}
}
}
}