android程序向SD卡写入文件,文件0KB问题【在线等】 本帖最后由 xiaokunyu 于 2012-05-03 16:05:39 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 有没有sync这个函数,这个将数据同步到sdcard中的。 sync ?? 能不能详细点 向sdcard写入数据,一般写入到缓冲区,sdcard会定时同步到sdcard存储器中去的。 这是个什么机制?android特定的?那我在程序里如何知道数据是否已经同步到SD卡里去了呢? 难道在复制完毕后,我再查询一次下这个文件,如果存在,且大小一致,则表示真正的复制完毕?你们的做法都这样的吗?同步这个操作可以人工程序触发吗? 这个是linux的机制,关键是你在拔出的时候,数据还没有同步到sdcard中。数据同步是需要时间的。 NAME sync - commit buffer cache to diskSYNOPSIS #include <unistd.h> void sync(void); NAME sync - commit buffer cache to diskSYNOPSIS #include <unistd.h> void sync(void); 数据同步是需要时间的。---我估计也是这样的,但是“制10MB的文件完毕立即拔出卡的时候,即使后面的几MB内容没来得及写入SD卡内,文件起码也得有个4 5MB吧。” 这个如何解释呢?另外我把buffer设置的很小了,才100B,这样的话,丢失的内容就很少。??FileLock?? sync 是C的? 现在是在java层 那个buf是filesystem的buf, 你设置的是那个buf? COPY_BUFFER_SIZEinput.read(buffer);我调试时,是修改这个变量 我在sdcard mount的时候加的option 中包含sync这个选项,每次写入数据后都会同步,但是发现这样会引起mmcqd(sdcard 驱动block 线程) cpu% 占用率较高。 在写数据时拔出sdcard,一般数据都会丢失。 我是在读写操作已经执行完毕了,再拔出的。文件流已经close,而且show出对话框提示用户“复制完毕”正常下用户也会这样做。现在就是在想这个数据同步到SD上的问题。按道理说这个fileoutputstream不是无缓存写入方式吗?怎么还会有这个缓存写入实体的问题呢。难道需要android底层的人员协调一下,将挂载SD的option加入你所说的sync? 你换个sdcard或者格式化sdcard试试,有时候卸载sdcard没按照正常的流程,会对文件系统造成损害,也有影响。 再看一下sdcard卡槽是否ok?pc 的sdcard host 有区别,传输速度有区别。 PC的是用读卡器接USB接口的,android机就是普通的SD卡槽,卡槽正常。 java flush 可能是将stream 的buf 清空到 filesystems buf, 跟sync不是一个东西。 这是我看到的一段注释:Note that fflush() only flushes the user space buffers provided by the C library. To ensure that the data is physically stored on disk the kernel buffers must be flushed too, for example, with sync(2) or fsync(2). Linux内核和Windows内核确实很多是不一样的android从sd卡操作文件,很麻烦 java有一个API,FileOutputStream.getFD().sync() 29楼方法正确,确实有这个API,而且有效,3Q。我看outfileputstream的flush()方法为空,为什么不默认调用这一句话,或者在close()方法里默认调用。 如何手动方式查看类的方法 100分求解答,监听下载功能 android 如何导出联系人 想买了android系统的手机跑自己的软件,买哪部好?? MTK6573智能机平台系统文件夹文件详解1 两个简单的问题 请教关于android客户端连接PC的server端程序的IP地址问题? android 图标缩放问题 DataOutputStream NullPointer?? 无障碍服务如何实现“自动点击器”app的能力 ubuntu升级之后,Android开发环境不能使用了 [下载]从Gmail中下载的附件,在下载内容中该附件的文件名显示重复
同步这个操作可以人工程序触发吗?
sync - commit buffer cache to diskSYNOPSIS
#include <unistd.h> void sync(void);
sync - commit buffer cache to diskSYNOPSIS
#include <unistd.h> void sync(void);
正常下用户也会这样做。现在就是在想这个数据同步到SD上的问题。按道理说这个fileoutputstream不是无缓存写入方式吗?怎么还会有这个缓存写入实体的问题呢。难道需要android底层的人员协调一下,将挂载SD的option加入你所说的sync?
Note that fflush() only flushes the user space buffers provided by the C library. To ensure that the data is physically
stored on disk the kernel buffers must be flushed too, for example, with sync(2) or fsync(2).
android从sd卡操作文件,很麻烦
FileOutputStream.getFD().sync()