From 826a6bf868800bedba8c310b8688589cf32760d2 Mon Sep 17 00:00:00 2001 From: mslxl <1302485739@qq.com> Date: Mon, 5 Feb 2018 16:24:44 +0800 Subject: [PATCH] Fix `Unable move temp file` on Arch Linux --- .../java/org/jackhuang/hmcl/task/FileDownloadTask.java | 7 +++++-- .../src/main/java/org/jackhuang/hmcl/util/FileUtils.java | 7 ++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FileDownloadTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FileDownloadTask.java index 4b0b78ac5..a21ed15fa 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FileDownloadTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FileDownloadTask.java @@ -202,8 +202,11 @@ public class FileDownloadTask extends Task { throw new IOException("Unable to delete existent file " + file); if (!FileUtils.makeDirectory(file.getAbsoluteFile().getParentFile())) throw new IOException("Unable to make parent directory " + file); - if (!temp.renameTo(file)) - throw new IOException("Unable to move temp file from " + temp + " to " + file); + try { + FileUtils.cutFile(temp, file); + } catch (Exception e) { + throw new IOException("Unable to move temp file from " + temp + " to " + file, e); + } } if (downloaded != contentLength) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/FileUtils.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/FileUtils.java index 92ea8bfd3..e48f22120 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/FileUtils.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/FileUtils.java @@ -236,7 +236,12 @@ public final class FileUtils { doCopyFile(srcFile, destFile); } - public static void doCopyFile(File srcFile, File destFile) + public static void cutFile(File srcFile, File destFile) throws IOException { + copyFile(srcFile, destFile); + srcFile.delete(); + } + + private static void doCopyFile(File srcFile, File destFile) throws IOException { Files.copy(srcFile.toPath(), destFile.toPath(), StandardCopyOption.COPY_ATTRIBUTES, StandardCopyOption.REPLACE_EXISTING); }