-
Notifications
You must be signed in to change notification settings - Fork 2.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在Vivo X5L 4.4.2 上运行DEMO 状态显示complete 但是文件不存在 #912
Comments
q请问具体运行的哪一个 Demo ? |
当前这个项目的demo @rantianhua |
经过我刚才的测试,问题应该出在 DownloadStatusCallback.renameTempFile() 这个方法应该存在兼容性问题。我自己 写了个方法 去测试,其实rename之后完全不需要再去删除 tempFile.
不过很奇怪的是,在DownloadStatusCallback中,tempFile 和TargetFile 完全属于不同的路径文件,为什么对tempFile 进行删除操作会同时删除掉 TargetFile.不知道Java底层(最终走的是FileSystem.rename)在 rename时,到底有对这两个对象进行什么操作,没去深究源代码,不知道原理。 临时解决方法
private void renameTempFile() throws IOException {
final String tempPath = model.getTempFilePath();
final String targetPath = model.getTargetFilePath();
final File tempFile = new File(tempPath);
boolean renameResult = false;
Log.d(TAG, "renameTempFile: tempPath=" + tempPath + " targetPath=" + targetPath);
try {
final File targetFile = new File(targetPath);
if (targetFile.exists()) {
final long oldTargetFileLength = targetFile.length();
if (!targetFile.delete()) {
throw new IOException(FileDownloadUtils.formatString(
"Can't delete the old file([%s], [%d]), " +
"so can't replace it with the new downloaded one.",
targetPath, oldTargetFileLength
));
} else {
FileDownloadLog.w(this, "The target file([%s], [%d]) will be replaced with" +
" the new downloaded file[%d]",
targetPath, oldTargetFileLength, tempFile.length());
}
}
renameResult = tempFile.renameTo(targetFile);
Log.d(TAG, "renameTo tempFile=" + tempFile + " targetFile=" + targetFile
+ " result=" + renameResult + " targetFile.exist()=" + targetFile.exists());
if (!renameResult) {
throw new IOException(FileDownloadUtils.formatString(
"Can't rename the temp downloaded file(%s) to the target file(%s)",
tempPath, targetPath
));
}
} finally {
boolean exist = tempFile.exists();
Log.d(TAG, "renameTempFile: tempFile exist=" + exist + " tempFile=" + tempFile);
if (exist && !renameResult) {
boolean delete = tempFile.delete();
Log.d(TAG, "renameTempFile: tempFile.delete()=" + delete + " tempFile=" + tempFile);
if (!delete) {
Log.w(TAG,
"delete the temp file(%s) failed, on completed downloading." +
tempPath);
}
}
}
} |
@Pluckypan 欢迎PR 😬 @rantianhua 这个问题这我这边直接处理了,重命名成功后确实不再需要删除,这个多余的操作,确实可能由于文件系统的缓存等机制引入新的问题。 |
非常感谢! 以后有问题会PR. @Jacksgong |
@Jacksgong 能提交下maven吗?好像gradle最新版本还是1.6.9。 |
@Pluckypan 我们会尽快发布的,1.7.0的发布还需要带上其他的Fix,你关注下这个Milestone |
还没有release.
发自我的 iPhone
… 在 2018年1月16日,上午9:58,Plucky ***@***.***> 写道:
@Jacksgong 能提交下maven吗?好像gradle最新版本还是1.6.9。
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.
|
好的,那我先上传至私有的maven.3Q @Jacksgong @rantianhua |
问题描述
在Vivo X5L 4.4.2 上运行DEMO,出现状态为 6(complete),但是下载文件不存在,下载过程中去文件夹查看,有生成临时文件,但是最终下载完成之后,临时文件被移除,并没有生成下载的最终文件。
运行环境
日志
已经开启
FileDownloadLog.NEED_LOG=true
并且是:filedownloader
进程的日志The text was updated successfully, but these errors were encountered: