2

嗨,我正在从用户的计算机中读取文件,然后使用特定的网络凭据将其写入网络共享,这会损坏一小部分文件。当我在十六进制编辑器中打开文件时,第一行的十六进制不同

Header:    00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
Good File: 50 4b 03 04 14 00 08 00 00 00 37 57 51 41 6f 61
Bad File:  50 4b 03 04 14 00 08 00 00 00 b7 56 51 41 6f 61

0a 和 0b 列的差异存在于整个文件中,

如果我以错误的方式解决这个问题,请务必纠正我,或者如果它只是一些更好的小东西。任何帮助深表感谢。我正在使用的代码如下

var fileStream = 
    new FileStream(source, FileMode.Open, FileAccess.Read, FileShare.None);

var impersonationContext =
    new WrapperImpersonationContext("myDomain", "myname", "myPass");

        impersonationContext.Enter();

        try
        {
            using (Stream file = File.OpenWrite(destination))
            {
                fileStream.CopyTo(file);
            }
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }
        finally
        {
            impersonationContext.Leave();

            if(fileStream != null)
            {
                fileStream.Close();
            }
        }
4

2 回答 2

2

FileStream.CopyTo()会将 n 个字节写入目标文件,但不会擦除先前存在的目标文件的末尾。打开输出流FileMode.Create应该保证一个精确的副本。

最后调用file.SetLength(file.Position);也可能有效,但我不确定如何可靠......

于 2012-10-17T17:32:12.920 回答
1

您正在查看 .zip 文件头。可识别的是“PK”,这是发明该格式的人 Phil Katz 的首字母。标头格式在此处记录。差异发生在偏移量 10。这是“文件最后修改日期”。具有不同修改日期的文件并不神秘,也不能轻易解释问题。

于 2012-10-17T18:53:19.557 回答