无法在安卓SD卡上写入文件

6

我有一个应用程序,可以将备份文件保存在SD卡上。它在HTC Nexus One和其他安卓手机上运行良好,但在某些手机上无法使用(读取或写入)。

在清单文件中,我已经设置了以下内容:

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  

例如(当我设置录制文件的路径时):
OutputStream output = new FileOutputStream(Environment.getExternalStorageDirectory()
                    + "/mydata.dat");
//Writing file...(It doesn't work)

我该如何获取SD卡的正确路径以便正确操作文件?


有错误吗?如果有,请将其附加到您的问题中。请注意,如果SD卡通过USB电缆连接到计算机,则无法保存到SD卡。 - Haphazard
我在应用程序中创建了一个文件,然后将文件放入SD卡中...就是这样。它可以在许多手机上运行,但例如在Sony Ericsson Xperia上无法工作...我需要获取正确的路径! - Maxime
这是意味着什么都没有发生还是你收到了一个错误? - Haphazard
什么都没发生...... 应用程序冻结。 - Maxime
我得到了一个像mnt/sdcard这样的路径,但它不是真实路径...他们真的很糟糕! - Maxime
你最好将初始写入放在try/catch中 - 如果出错,请尝试写入“/sdcard/”,并希望一切顺利。或者尝试下面@mah所说的方法。 - Haphazard
3个回答

0
当你说“它不工作时”……具体是什么情况?你是指程序运行没有任何投诉,但文件没有被写入sdcard,还是指其他问题?
如果文件根本就不在那里,这不是你的错,而是手机制造商的错。例如,在至少一台Motorola设备和Samsung Galaxy Tab(7英寸)上,即使/mnt/sdcard指向内部存储器,也会返回/mnt/sdcard!
对此,您无法做出任何合法的操作 - 原始设备制造商向您提供了错误信息。如果想要通过黑客式解决方法绕过这个问题,可以读取/proc/mounts,并尝试找到sdcard的实际路径,但/mnt/sdcard也会显示在其中,没有保证能够区分所有设备的真相。

但是我如何获取正确的sdcard路径... 我在应用程序中创建一个文件,然后将文件放入sdcard中... 就这样。 - Maxime
不幸的是,当设备制造商向您报告内部路径为外部存储时,您无法在代码中做太多事情来确定设备是否在撒谎。您可以使用一些技巧,但像许多技巧一样,它将在在不同的设备或不同的操作系统版本上运行代码时容易出现问题。这样的技巧是检测/mnt/sdcard-ext是否存在为已挂载设备,如果是,则使用它。这在某些设备上可以工作,但我不知道其他设备如何。 - mah

0
通常情况下,Android 不允许您直接将文件写入 SDCard 的根目录。您必须在 SDCard 根目录中创建一个文件夹,然后将文件写入新创建的文件夹中。
尝试这样做,应该可以解决问题。

-1

我有Sony Xperia tipo dual和这个:

FILE* pFile = fopen("/mnt/sdcard/mydata.dat","w+");

还有这个:

FILE* pFile = fopen("/sdcard/mydata.dat","w+");

两者都可以正常工作。(我是在本地环境中完成的)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接