问题是这样的:
条件:
程序初始化时候在c盘下save文件夹下建立好100个文件 为a1,a2,a3,。a100 后缀什么都无所谓。
需求:
程序不定期向这个save文件夹下的某个文件中备份数据(二进制数组);存储的时间无规律 ,每次的数组长度不一定,但是不超过32k,要求是从a1 开始存,在a1中存100次后转到a2存,也就是每个文件下存100次。
要求是向某个文件中比如a1中存时 第一次就正常从位置零开始存,第二次不管要存的数组多长都在从零开始的32k字节后的位置开始存  
也就是说每次如果数组不够32k长都留到32k个字节的位置下次就从这个位置开始存 
也就是说每个文件比如a1 的大小最后都是 32k x 100=3200k 如何做呢?怎么判断某个时刻要存时候 应该往哪个文件(a1.a2....a100)几里存呢?

解决方案 »

  1.   

    好像每个文件的大小不都是32k x 100 ,总之就是每次存都是按32x1024个字节的长度存 不够的就留空就可以了。存储的起始位置都是32x1024 个倍数吧  。先谢谢大家帮忙
      

  2.   

    每个文件的大小当然不一定是32K x 100,因为按照你上面的方法,每次存的数据不一定刚好是32K,要想使每次存的数据都是32K,你需要在数据不足32K的时候,用其它字符去补全。不过我个人的感觉,上面的方法不好,你可以试试我以下的方法:
    1、为每个文件创建存储索引,可以对每次存储进行标记,如:4Bytes的起始位置,4Bytes的长度;
    2、每次写文件的时候,从最后进行写起,写完后,修改相应的索引;
    3、每次读文件的时候,先读索引,再通过索引去读内容。
      

  3.   

    至于如何选择文件,有很多方法,当然首先先把每个文件本身的信息先读出来,然后组成个list,至于后来选什么文件,算法如:简单顺序、随机、最少使用优先、最多使用优先等等,看你需求而定了。
      

  4.   

    最好另设一个文件做为索引和记录表。用于记录当前写入的文件号,方便下次写入时寻找,至于每次数据不够32K的问题,如果必须,可用别的字符填充,但这样效率很低。
    既然是二进制数组数据,建议采用Stream.Binary方式读写,再加上索引表,就不用考虑够不够32K的问题了。