【发布时间】:2013-11-30 16:44:55
【问题描述】:
我正在构建一个 UI 应用程序 (.exe) 以在 Windows 主机上运行,它应该能够
- 列出已连接的安卓设备。
- 在内存(不是 sdcard)上写入一个 512 字节的文件。要从 UI 输入的写入路径。
要写入的文件在内部存储器上必须正好是 512 字节,这对我的应用程序需求至关重要。这是我的接近方式:
- 我使用 Qt 编写了 UI 和基本逻辑。
- 应用程序使用 adb devices 枚举连接的设备并显示在 UI 的 listView 中。
-
要写入文件,我首先在磁盘(我的电脑)上创建一个文件,用 512 字节(我预先配置的内容)填充它,然后使用 adb 将此文件推送到设备上
int DoWrite(Buffer* pBuf) { // pBuf contains preconfigured 512 byte pattern to be written to a file on device //prepare a local file char*cmdBuf = new char[512]; for (int i(0); i < 512; ++i) cmdBuf[i] = pBuf->operator[](i); ofstream myFormattedFile; if(myFormattedFile.is_open()) { //temp file creation successful pBuf->WriteFormattedDataToStream(myFormattedFile); myFormattedFile.close(); } FILE* fp = 0; fp = fopen("rawData.bin", "wb"); int temp = fwrite(cmdBuf, sizeof(char), 512, fp); fclose(fp); //push this file to device at /mnt/emmc/diagnose (or whatever the myFilePath is set to) //ADB_PATH is set to adb executable //m_filePath is set to /mnt/emmc std::string cmd = ADB_PATH + "adb push " + "C:\\Users\\MyUser\\DiagTool\\rawData.bin " + m_filePath; //Execute push command int rc = system(cmd.c_str()); delete [] cmdBuf; return 0; }
我可以看到文件 /mnt/emmc/diagnose 已创建。 获取 adb shell,并在 /mnt/emmc 上执行 ls -l 确实显示文件大小为 512!
所以,这是我的问题:
- 我在本地创建的文件显示以下属性
是不是我在磁盘上创建的文件实际上不是 512 字节,而是 4KB?
那么,如果我使用 adb push,在设备上创建的文件大小是多少? 512 字节还是因为它通过操作系统,它会应用适当的填充,实际文件大小不会是 512 字节?
这是写入内部存储器的正确方法吗?还是有更好的方法?
我不喜欢在设备上安装任何 .apk,并使用我的应用程序与之交互。但如果没有任何效果,我也可以采用这种方法!
感谢任何帮助或指针...
【问题讨论】:
标签: android c++ file-io usb filesize