【发布时间】:2017-05-08 05:10:25
【问题描述】:
这对某些人来说听起来很奇怪,而对某些人来说会很抱歉。实际上我没有用清晰的语言找到我的答案,所以在这里发布一个问题。
我正在尝试创建 android ndk 项目,应用程序将在其中读取文件并写入另一个位置,例如; (复制和粘贴)。我想为此使用 NDK (C++)。但在我开始之前,我的小脑袋里有很多问题。
开始吧
-
在用 c++ 编写一个简单的文件(读/写)程序时。我发现没有 64 位等效的查找函数来查找大于 2Gb 的文件大小。那么是否可以使用 ndk 在 android 中读取/写入大小为 2Gb 的文件。或者我们必须使用第三方库来实现这一点。
我正在关注这个帖子。 JNI: Reading a text file in C code and returning to sdk
-
在以下位置找到某些信息: Android low-level read of SD card greater than 2GB 其中统计了
的使用情况int __llseek(unsigned int fd, unsigned long offset_high, unsigned long offset_low, loff_t *result, unsigned int whence);
根据 NDK 14 我在#include <unistd.h> 中找到了这个函数
extern off64_t lseek64(int, off64_t, int);
我是走在正确的道路上还是我遗漏了什么重要的东西。
最后,有没有关于android的文件大小或文件系统限制的信息。
更新
使用以下标题
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
用于创建文件
int fd = open(strFileName, O_CREAT | O_RDWR | O_LARGEFILE);
off64_t offset = lseek64(fd,filesize,SEEK_SET);
char textToWrite[25];
sprintf(textToWrite, "%s", "WELCOME ANDRIOD NDK 15.0");
write(fd, &textToWrite, sizeof(textToWrite));
阅读
int fd = open(strFileName, O_RDWR | O_LARGEFILE);
off64_t offset = lseek64(fd,filesize,SEEK_SET);
char textToRead[25];
read(fd, &textToRead, sizeof(textToRead));
使用大于 4 Gigs 的 filesize 4600000000 测试。
现在这里出现了更多问题,因为我的目标是来自 android minSDK 15 及更高版本的应用程序。
- do above 功能适用于大于 15 及以上的设备。
我没有定义
_FILE_OFFSET_BITS 64这种方式在 android 15 及更高版本上处理大文件是否安全。
感谢您阅读。
【问题讨论】:
-
你还需要寻找吗?你说你找到了你需要的功能。你测试过吗?
-
您认为复制粘贴 2gb 文件是个好方法吗?保存文件路径并使用它而不是在路径中复制不是更好吗?
-
实际上任务有点不同,为了便于理解,我提到了复制和粘贴。我还在测试它。
-
为什么在 C++ 和 JNI 中?您可以使用
RandomAccessFile在 Java 中查找 64 位。 -
@EJP 这是我项目的要求
标签: android c++ android-ndk java-native-interface