[英]Read-Write File greater than 2GB Android NDK (C++)
对于某些人来说,这听起来很奇怪,而对于某些人来说,它却有些重复。 其实我没有用清晰的词找到答案,所以在这里发布一个问题。
我正在尝试创建android ndk项目,应用程序将在其中读取文件并写入另一个位置,例如; (复制和粘贴)。 我想为此使用NDK(C ++)。 但是在我开始之前,我的小脑袋里碰到了很多问题。
开始吧
在用C ++编写简单文件(读/写)程序时。 我发现没有64位等效查找功能来查找大于2Gb的文件。 因此可以在ndk中读取/写入2Gb以上大小的文件。 否则我们必须使用第三方库来实现这一目标。
我正在关注这个话题。 JNI:使用C代码读取文本文件并返回sdk
在以下位置找到了某些信息: Android低级读取的SD卡大于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的文件大小或文件系统限制的信息。
UPDATE
使用以下标题
#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));
经过测试, filesize 4600000000
,大于4 Gigs。
现在,这里出现了更多问题,因为我的目标是来自android minSDK 15及更高版本的应用。
我尚未定义_FILE_OFFSET_BITS 64
这样可以安全地处理android 15及更高版本上的大文件。
感谢您阅读。
直到最近才实现了所有off64_t
变体: https : off64_t
看起来其中大多数功能受M支持,但有些功能仍位于N中。换句话说,取决于确切需要的功能,您可能无法在N之前的任何设备上执行此操作。
为了使这一点更加透明调用代码,你可以定义_FILE_OFFSET_BITS=64
建设,然后头会自动替换时off32_t
与变种off64_t
时,在你的NDK API级别可供他们。
请注意,要使头文件足够新,您需要至少使用NDK r14,以便可以使用统一头文件 。 不过,该发行版中的统一标头存在一些问题,因此您可能还想尝试将于下周在I / O发行的r15 beta 2。
编辑:是的,您发布的代码很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.