怎么获得一个文件的唯一标识符(在文件的整个生命周期中)?该文件的内容是可变的,路径和名字也是可变的,创建时间也是可变的,因为可能从一个地方复制到另一个地方(如在代码的版本控制器中)。详细的说是:需要在文件的整个生命周期中为文件创建一个一直不变的UUID,让该UUID一直"跟随"着该文件,从它创建、期间可能改名、修改内容、从一个地方copy到另一个地方(包含从一个计算机copy到另一个计算机)。 但是不能写在文件中。整个需求可能有点苛刻,但是希望大家出出主意,顶者有分,谢谢了!

解决方案 »

  1.   

    不能写在文件中,怎么保证uuid和文件对应?另外建立个数据库表?产生一个uuid,然后建立个表,动态跟踪这个文件和这个id?
      

  2.   

    谢谢各位,我的意思是在不增加开销的情况下(比如在文件系统中维护一个映射或者数据库表),是有点难度,本来想创建时间有戏,可是如果从一个地方copy到另外一个地方,创建时间也变了。
      

  3.   

    你这也太动态了, 只有数据库里做文章了, 生成一个UUID 对应一个文件,再把文件的路径\文件名存在数据里(对应这个UUID), 当对文件进行操作里动态的改变数据中的路径\文件名(保证能找到文件)。  如果按LZ的意思, 我想一辈子也找不到文件了。
      

  4.   

    文件除了名字,创建时间,大小  应该还有其他的信息比如说:描述,作者等信息可以添加 这样你怎么改也不会改变吧,这些信息是写在哪里的不清楚:(----谢谢啊!我以前试过创建一个记事本,然后在其属性中填上一些信息(比如说:描述,作者),但是我用msn传给另外的机器,这些信息就消失了,另外也许只有windows才有这些信息,不能跨平台啊,这也是为什么java API中没有getCreateTime的原因啊!
      

  5.   

    这个东西要根据逻辑来设计了。你创建文件的时候就记录文件的历史变动记录。最好在数据库中建表记录。
    到时候更加变动历史来查询区分就可以了。
    当然这样效率不高。不过你什么都在变,又不能写入文件。也真麻烦。还有一个方法,不知道满足你的要求不。就是写在文件名后边。比如
    xxx.txt.uuid  你看文件名称的时候,就看xxx.txt部分。后边就做为uuid来识别。
      

  6.   

    我觉得吧,既然不能在文件名、创建时间等等属性上做文章,就生成一个uuid加到文件内部(比如文件头部信息或者直接文件第一行),以后判断文件时,就从文件中获取这个uuid来进行识别。或者,就像上面说的,用一个数据库表,动态跟踪,每当文件变了,就更新数据库表。
      

  7.   

    专门维护一个 .ini文件。用于保存文件信息。
      

  8.   

    定义你自己的文件格式,这个文件只能是2进制文件。
    比如一个xls文件,你从他的属性里可以看到它的创建时间、公司、作者……
    xls有自己的文件格式,某些段就是用来保存这些信息的,你自己也可以定义自己的文件格式。
      

  9.   

     windows下NTFS格式是可以实现的,可以将附加信息加在文件里面,用户也看不到。但linux下就不知道怎么搞了。