0

我已经将一个非常大的应用程序移植到 Android。它通过 TCP/IP 接收二进制数据,并将其写入应用程序中不时使用的文件。保存文件的目录默认设置为 ./file_cache。这里出错了:

fileHandle = fopen(filename,"wb");

在这种情况下,文件名是“file_i”,其中 i 从 0 开始并为每个文件递增。

程序在写入时崩溃,它不必在第一个文件上崩溃,有时它会到达第 10 个文件。当它崩溃时,fileHandle 最终为 NULL。

文件名最初在 wchar 中,但之前已转换(我在记录器中将其打印出来以确认它是正确的)。

我试过的:

  • 我添加了所有似乎与文件读/写外部存储有关的权限。

  • 我尝试了不同的位置 /sdcard/files 和 /data/data/<package>/files

问题:

  1. 当前目录是什么,即文件在默认设置下真正结束的位置是什么?

  2. 是什么导致 fopen 返回 null,而这又是导致崩溃的原因?

非常感谢任何想法。

4

1 回答 1

0

我发现了问题,虽然这是一个一般程序错误。文件名“file_i”是由于一些复杂的代码被分配了大小1,这自然是太小了,导致分段错误。所以它与fopen无关。实际上,我遇到的所有分段错误都是由与此类似的错误引起的,因此每当您弄乱 char/wchar 时,都值得仔细检查您的代码。

此外,我使用工作正常的 /data/data/.. 文件夹,实际上并没有尝试过 sdcard 文件夹,但不明白为什么它不起作用。

于 2013-05-28T15:14:15.683 回答