From: tobiasKaminsky Date: Sun, 22 Nov 2015 12:22:59 +0000 (+0100) Subject: rename file is not working across mount points: therefore copying it and then delete X-Git-Tag: beta-20151202~2^2~6 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/d901208c1fb59557f6b00f19603fd58bd4e4746d?ds=inline;hp=-c rename file is not working across mount points: therefore copying it and then delete --- d901208c1fb59557f6b00f19603fd58bd4e4746d diff --git a/src/com/owncloud/android/operations/UploadFileOperation.java b/src/com/owncloud/android/operations/UploadFileOperation.java index 94210e58..26db0b32 100644 --- a/src/com/owncloud/android/operations/UploadFileOperation.java +++ b/src/com/owncloud/android/operations/UploadFileOperation.java @@ -26,6 +26,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.nio.channels.FileChannel; import java.util.HashSet; import java.util.Iterator; import java.util.Set; @@ -348,17 +349,37 @@ public class UploadFileOperation extends RemoteOperation { if (!expectedFile.equals(fileToMove)) { File expectedFolder = expectedFile.getParentFile(); expectedFolder.mkdirs(); - if (!expectedFolder.isDirectory() || !fileToMove.renameTo(expectedFile)) { - mFile.setStoragePath(null); // forget the local file - // by now, treat this as a success; the file was - // uploaded; the user won't like that the local file - // is not linked, but this should be a very rare - // fail; - // the best option could be show a warning message - // (but not a fail) - // result = new - // RemoteOperationResult(ResultCode.LOCAL_STORAGE_NOT_MOVED); - // return result; + + if (expectedFolder.isDirectory()){ + if (!fileToMove.renameTo(expectedFile)){ + // try to copy and then delete + expectedFile.createNewFile(); + FileChannel inChannel = new FileInputStream(fileToMove).getChannel(); + FileChannel outChannel = new FileOutputStream(expectedFile).getChannel(); + + try { + inChannel.transferTo(0, inChannel.size(), outChannel); + fileToMove.delete(); + } catch (Exception e){ + mFile.setStoragePath(null); // forget the local file + // by now, treat this as a success; the file was + // uploaded; the user won't like that the local file + // is not linked, but this should be a very rare + // fail; + // the best option could be show a warning message + // (but not a fail) + // result = new + // RemoteOperationResult(ResultCode.LOCAL_STORAGE_NOT_MOVED); + // return result; + } + finally { + if (inChannel != null) inChannel.close(); + if (outChannel != null) outChannel.close(); + } + } + + } else { + mFile.setStoragePath(null); } } }