两个文件是二进制相同的,但表现出不同的行为

问题描述:

我与标签asp.net和excel发布,因为这是我的问题的起源,但我不知道这是正确的地方 - 最终,我的问题是,我有两个文件(通过ASP.Net应用程序服务)的基础上的二进制文件,该文件是相同的比较使用两个文件是二进制相同的,但表现出不同的行为

fc /B A.xls B.xls 

然而,他们表现出不同的行为:在Excel中的第一个打开的罚款;第二个不是。然后,我得出结论,除了FC实用程序检查的文件之外,文件有所不同。

我试着将这两个文件发送给朋友来要求他的帮助,但发现当我这样做时,问题文件变得“固定”。事实上,如果我对这个文件做任何事情,它都会被“修复”。通过修正,我的意思是它在Excel中打开的很好。例如,如果我压缩它,然后从压缩文件中提取它,那就很好。如果我在Notepad ++和“另存为”中打开,那很好。与写字板一样。使用普通的旧记事本不会修复它。

所以,显然,这两个文件有一些差异,我失踪了。

我不知道我是否会存有任何侥幸要求人们访问网站随意,但如果你想看到的行为的一个例子,我创建了一个最小的页面在http://rodj.me/ExcelTest

重现问题

点击链接“MinimalHtml.aspx”,并且应用程序将使用在页面加载以下服务基于HTML xls文件:

protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.ContentType = "application/vnd.ms-excel"; 
    Response.AddHeader("Content-Disposition", "filename=MinimalHtml.xls"); 
} 

根据您的浏览器和浏览器设置(我的测试已经在Chrome),您可能会打开一个空白页面的Excel。无论如何,你应该得到文件MinimalHtml.xls下载。这是一个纯文本文件。你会发现这个文件不会在Excel中打开。但是,如果您压缩文件,然后从zip中提取它,它将打开。

我很想知道在进行FC比较时我错过了什么其他文件差异,但最终我需要更正ASP.Net应用程序以正确提供HTML版本的Excel文件。有趣的是,如果我创建了电子表格的XML版本,它会下载/打开罚款。这就是“MinimalXml.aspx”链接的作用。

任何人都可以帮忙1)如何弄清楚两个文件有什么不同;或者2)ASP.Net应用程序必须改变它以使其正确地提供文件?

+1

除非我错过了它(这里有很多文字),你没有告诉我们*当你尝试打开第二个文件时会发生什么?你有错误吗?如果是这样,它说什么?如果不是,那么*会发生什么? –

+1

“这个文件不会在Excel中打开是什么意思”? Excel中是否显示错误?马上我想到的一个区别是MOTW(网络标志),它被附加到从互联网下载的文件上。取决于您使用的压缩工具,当您从具有MOTW的zip包中解压缩时,此标记也会附加(或不附加到)文件。 MOTW存储在NTFS备用数据流中。您可以通过打开文件属性并选择* Unblock *(或使用Sysinternals的'streams -d '命令)来删除此标记。 –

+0

Damien:非常感谢澄清的请求,我意识到我确实不清楚试图在Excel中打开时的具体问题。会发生什么是Excel应用程序本身打开,但空白的屏幕。窗口标题只是“Excel”。德克:谢谢,这个“MOTW”听起来很可能,我会调查。不幸的是,如果确实是这个问题,那么在我看来,我无法在服务器上减轻负担。 – Rob3C

我认为你的问题可能是微软的安全补丁。请参阅此文章: Infoworld article

当您直接打开该文件时,该修补程序会导致导致出现空白页的问题,因为文件内容是HTML而不是Excel。当您在Zip文件中下载文件并将其解压缩时,它被认为是安全的并可正确打开。

+0

我也只在Chrome中看到此问题。另外,我认为Dirk的答案至少是部分正确的,因为MOTW解释了与从zip文件中提取后直接打开Excel文件的不同行为。 –