FtpWebRequest request = (FtpWebRequest)WebRequest.Create(string.Format("{0}{1}", URL, node.ChildNodes[i].ChildNodes[0].InnerText));
                request.Method = WebRequestMethods.Ftp.DownloadFile;
                request.Credentials = new NetworkCredential("wususu", "wususu");
                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
                Stream responseStream = response.GetResponseStream(); 
                StreamReader red = new StreamReader(responseStream,Encoding.Unicode);
                string tmp = red.ReadToEnd(); 
                byte[] mbyte = Encoding.Unicode.GetBytes(tmp);和用DirectoryInfo获得的文件大小不一样啊,这是什么原因造成的呢?望高手解答

解决方案 »

  1.   

    硬盘按照 block 来存储, 一个 block 有若干字节(不同文件系统不同),getBytes 取得的是真正的字节数.当文件不够一个 block 大小时, 使用 DirectoryInfo 取得的是 一个 block 的大小吧.
      

  2.   

    结果反了getBytes取得的还大点,而FileInfo取得的还小点。我现在两边取得的不一样,下面的程序没法做了
      

  3.   

    FAT16分区的簇大小为32KB
    FAT32分区的簇大小为 4KB ( 2GB~ 8GB)
                      8KB ( 8GB~16GB)
                     16KB (16GB~32GB)NTFS分区的簇大小为  4KB (2GB~2TB)
    不管哪种分区,文件大小与占用空间是不一致的,单位以簇为单位,即使是0字节的文件,在NTFS分区下,占用空间也是4KB(4096字节)。可以在资源管理器中实际测试一下。
      

  4.   

    因为NETSTREAM没有检索功能,所以我先将它转化为字符串,然后再将字符串转化为流,这二者间有什么不同的地方吗?我所获得的长度和用FileInfo所获得的长度不一样啊,望解答。
      

  5.   

    File.ReadAllBytes() 取得的文件长度 和 FileInfo是一致的.试试下面这个方法
    byte[] b = File.ReadAllBytes("C:\\2.txt");
      

  6.   

    字符串 在 文件中占的大小, 跟 在内存中占的大小 是否相等编码有关? 记得有些编码是压缩格式.而 c# string 是 unicode,待测试.
      

  7.   

    晕倒,你这中间有了个转换,当然不一样了,如果你拿那个“response.GetResponseStream();”返回的的Stream直接写入FileStream,我相信,那样的大小就会一样了。