老同志遇到新问题:
    假设某机器上有一文件,创建日期为2004-1-1.现在需要将该文件在ASP.NET中上传至服务器上某文件夹下,在上传过程中,要求获取此文件的创建日期(2004-1-1),请问该如何获取?(通过服务端获取,不能通过客户端)    一般来说,通过上传对象的SaveAs将文件存储至服务器硬盘之后,该文件的创建日期/修改日期/访问日期等信息会重新建立,而在此之前的信息将会丢失.

解决方案 »

  1.   

    http://down.dvbbs.net/infoView/Article_2755.html
      

  2.   

    http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpref/html/frlrfsystemiofilesysteminfoclasscreationtimetopic.asp
      

  3.   

    <HTML>
    <HEAD>
    <SCRIPT>
    function getFileTime (fileName) {
      if (document.layers) {
        if (navigator.javaEnabled()) {
          var file = new java.io.File(fileName);
          if (location.protocol.toLowerCase() != 'file:')
            netscape.security.PrivilegeManager.enablePrivilege('UniversalFileRead');
          return file.length();
        }
        else return -1;
      }
      else if (document.all) {
        window.oldOnError = window.onerror;
        window.onerror = function (err) {
          if (err.indexOf('utomation') != -1) {
            alert('不能访问文件');
            return true;
          }
          else 
            return false;
        };
        var fso = new ActiveXObject('Scripting.FileSystemObject');
        var file = fso.GetFile(fileName);
        window.onerror = window.oldOnError;
        return file.DateCreated;
      }
    }
    </SCRIPT></HEAD>
    <BODY>
    <FORM NAME="formName">
    <INPUT TYPE="file" NAME="fileName">
    <BR>
    <INPUT TYPE="button" VALUE="检测日期" ONCLICK="alert(getFileTime(this.form.fileName.value))">
    </FORM>
    </BODY>
    </HTML>
      

  4.   

    怪异的要求,agree net_lover(孟子E章)
      

  5.   

    不知道你的客户端是否能在客户端安装控件、Net执行平台、java执行平台,
    如果可以的话,你用控件写,否则不行的!
      

  6.   

    //****获取文件创建时间
        public static string  GetFileCreateDataeTime(string FilePath)
        {
            if (File.Exists(FilePath) == false) return "";        DirectoryInfo mDirectoryInfo = new DirectoryInfo(FilePath);        string strCreateDateTime="";        strCreateDateTime=mDirectoryInfo.CreationTime.ToLongDateString();        //***返回文件最早创建时间
            return strCreateDateTime;
            
        }
      

  7.   

    因为某些原因,需要获取用户某个上传文件的创建时间(指客户端的创建时间).
    孟子提出的以脚本来获取被上传文件的创建时间,可行,但美中不足的是会在客户端弹出提示框,而且如果没有设置为信任站点恐怕还不行.
    其他的朋友,罗列了一些服务端取文件创建时间的方法,但由于文件上传之后,所有的创建信息都重新创建了,这些方法不可取.
    我想,一个文件的创建,它的创建信息肯定储存在该文件的内部,不会因为转移到某些地方而改变,比如在A的机器上创建一个文件,再使用拷贝的方式将它放到B的机器上,它的创建时间仍然是A机器上的创建时间.
    既然创建时间信息存储在文件内部,那么,当此文件上传的时候,它肯定是包含了完整的信息,只不过,在保存到服务器硬盘上的时候,这些信息被清空了.但如果能够通过某种方法,在保存到服务器硬盘上之前,通过它的InputStream流,来读取原来的创建信息,可能是一个可行的办法.
      

  8.   

    文件的这些属性不一定是保存在文件内的,我觉得有可能是在FAT/MFT中,或者类似的文件系统主表,因为不同的文件系统有不同的文件属性,FAT和NTFS就不同。你所说的传输时仍然保留属性,是因为改中传输方式会有额外的指令传递这些属性。至少拿我们熟悉的HTTP来说,就可以在HTTP头中得知创建时间和更新时间的属性。因此,用Stream读文件应该是读不到这些信息的。
      

  9.   

    因为不同的文件系统有不同的文件属性,FAT和NTFS就不同
    ----------------
    但是,从一台分区为FAT的机器上,拷贝一个文件到NTFS分区的主机上,原始的创建时间仍然存在.
    退一步说,通常我们上传的主机,它仍然是WINDOWS系统,甚至还是相同分区格式的.
    如果文件创建信息不存在于文件本身,在文件转移的过程中,怎么可能还存在原来的创建信息呢?而它事实上确实存在,并不会因为复制或移动而消失.所以我认为它是存在于文件内部的.
    同理,我们上传一个文件,是把整个文件信息都上传上去,所以我认为在未保存前,这些信息仍然存在,只不过是如何读取出来罢了.
      

  10.   

    举个例子,我们熟悉的一些文件格式,如bmp或者zip,搜索一下都可以在网上找到文件格式的详细描述,包括开头固定长度的几个字节分别存放什么信息,然后第几个字节开始是文件的主体长度可变,但绝对不会说到在那里要存放文件的创建时间。我也说了,HTTP都能够在协议头传输文件的创建时间,Windows共享(基于UDP)自然也可能有这种设计。