1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-10 17:55:39 +02:00

Bug 561318: Recursively delete files without running out of handles

Change-Id: Ib760f53a22bb75f0447c633341728a49cdf8cbfb
Signed-off-by: Martin Weber <fifteenknots505@gmail.com>
This commit is contained in:
Martin Weber 2020-03-21 19:17:22 -04:00 committed by Jonah Graham
parent 6f08d31fe9
commit 268903ba01

View file

@ -13,8 +13,11 @@ package org.eclipse.cdt.cmake.core.internal;
import java.io.File; import java.io.File;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
@ -318,13 +321,26 @@ public class CMakeBuildConfiguration extends CBuildConfiguration {
} }
} }
private void cleanDirectory(Path dir) throws IOException { /** Recursively removes any files and directories found in the specified Path.
*/
private static void cleanDirectory(Path dir) throws IOException {
SimpleFileVisitor<Path> deltor = new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
Files.delete(file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
super.postVisitDirectory(dir, exc);
Files.delete(dir);
return FileVisitResult.CONTINUE;
}
};
Path[] files = Files.list(dir).toArray(Path[]::new); Path[] files = Files.list(dir).toArray(Path[]::new);
for (Path file : files) { for (Path file : files) {
if (Files.isDirectory(file)) Files.walkFileTree(file, deltor);
cleanDirectory(file);
else
Files.delete(file);
} }
} }