本帖最后由 xiaokunyu 于 2012-05-03 16:05:39 编辑

解决方案 »

  1.   

    有没有sync这个函数,这个将数据同步到sdcard中的。
      

  2.   

    sync ?? 能不能详细点
      

  3.   

    向sdcard写入数据,一般写入到缓冲区,sdcard会定时同步到sdcard存储器中去的。
      

  4.   

    这是个什么机制?android特定的?那我在程序里如何知道数据是否已经同步到SD卡里去了呢? 难道在复制完毕后,我再查询一次下这个文件,如果存在,且大小一致,则表示真正的复制完毕?你们的做法都这样的吗?
    同步这个操作可以人工程序触发吗?
      

  5.   

    这个是linux的机制,关键是你在拔出的时候,数据还没有同步到sdcard中。数据同步是需要时间的。
      

  6.   

    NAME
           sync - commit buffer cache to diskSYNOPSIS
           #include <unistd.h>       void sync(void);
      

  7.   

    NAME
           sync - commit buffer cache to diskSYNOPSIS
           #include <unistd.h>       void sync(void);
      

  8.   

    数据同步是需要时间的。---我估计也是这样的,但是“制10MB的文件完毕立即拔出卡的时候,即使后面的几MB内容没来得及写入SD卡内,文件起码也得有个4 5MB吧。” 这个如何解释呢?另外我把buffer设置的很小了,才100B,这样的话,丢失的内容就很少。??FileLock??
      

  9.   

    sync  是C的? 现在是在java层
      

  10.   

    那个buf是filesystem的buf, 你设置的是那个buf?
      

  11.   

    COPY_BUFFER_SIZEinput.read(buffer);我调试时,是修改这个变量
      

  12.   

    我在sdcard mount的时候加的option 中包含sync这个选项,每次写入数据后都会同步,但是发现这样会引起mmcqd(sdcard 驱动block 线程) cpu% 占用率较高。
      

  13.   

    在写数据时拔出sdcard,一般数据都会丢失。
      

  14.   

    我是在读写操作已经执行完毕了,再拔出的。文件流已经close,而且show出对话框提示用户“复制完毕”
    正常下用户也会这样做。现在就是在想这个数据同步到SD上的问题。按道理说这个fileoutputstream不是无缓存写入方式吗?怎么还会有这个缓存写入实体的问题呢。难道需要android底层的人员协调一下,将挂载SD的option加入你所说的sync?
      

  15.   

    你换个sdcard或者格式化sdcard试试,有时候卸载sdcard没按照正常的流程,会对文件系统造成损害,也有影响。
      

  16.   

    再看一下sdcard卡槽是否ok?pc 的sdcard host 有区别,传输速度有区别。
      

  17.   

    PC的是用读卡器接USB接口的,android机就是普通的SD卡槽,卡槽正常。
      

  18.   

    java flush 可能是将stream 的buf 清空到 filesystems buf, 跟sync不是一个东西。
      

  19.   

    这是我看到的一段注释:
    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).
      

  20.   

    Linux内核和Windows内核确实很多是不一样的
    android从sd卡操作文件,很麻烦 
      

  21.   

    java有一个API,
    FileOutputStream.getFD().sync()
      

  22.   

    29楼方法正确,确实有这个API,而且有效,3Q。我看outfileputstream的flush()方法为空,为什么不默认调用这一句话,或者在close()方法里默认调用。