如何在 Visual C# 创建一个文件比较函数

文章翻译 文章翻译
文章编号: 320348 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

本文分步介绍说明如何比较两个文件,以查看其内容是否相同。这种比较会查看不在文件名称、 位置、 日期、 时间,或其他属性在两个文件的内容。

此功能是基于 ms-dos 的 Fc.exe 实用工具与各种版本的 Microsoft Windows 和 Microsoft MS-DOS 和某些开发工具中包含相似的。

本文所述将示例代码执行逐字节比较,直到它找到一个不匹配或到达文件结尾。该代码还执行两个简单的检查,以提高效率的比较:
  • 如果两个相同的文件的文件引用点,这两个文件必须相等。
  • 如果两个文件的大小不是相同,这两个文件都不相同。

创建示例

  1. 创建一个新的 Visual C# Windows 应用程序项目。默认状态下,创建 Form1。
  2. 将两个文本框控件添加到窗体。
  3. 将命令按钮添加到窗体。
  4. 视图 菜单上单击 代码
  5. 将以下 USING 语句添加到 Form1 类:
    using System.IO;
    					
  6. 将下面的方法添加到 Form1 类:
    // This method accepts two strings the represent two files to 
    // compare. A return value of 0 indicates that the contents of the files
    // are the same. A return value of any other value indicates that the 
    // files are not the same.
    private bool FileCompare(string file1, string file2)
    {
         int file1byte;
         int file2byte;
         FileStream fs1;
         FileStream fs2;
    
         // Determine if the same file was referenced two times.
         if (file1 == file2)
         {
              // Return true to indicate that the files are the same.
              return true;
         }
                   
         // Open the two files.
         fs1 = new FileStream(file1, FileMode.Open);
         fs2 = new FileStream(file2, FileMode.Open);
              
         // Check the file sizes. If they are not the same, the files 
            // are not the same.
         if (fs1.Length != fs2.Length)
         {
              // Close the file
              fs1.Close();
              fs2.Close();
    
              // Return false to indicate files are different
              return false;
         }
    
         // Read and compare a byte from each file until either a
         // non-matching set of bytes is found or until the end of
         // file1 is reached.
         do 
         {
              // Read one byte from each file.
              file1byte = fs1.ReadByte();
              file2byte = fs2.ReadByte();
         }
         while ((file1byte == file2byte) && (file1byte != -1));
         
         // Close the files.
         fs1.Close();
         fs2.Close();
    
         // Return the success of the comparison. "file1byte" is 
         // equal to "file2byte" at this point only if the files are 
            // the same.
         return ((file1byte - file2byte) == 0);
    }
    					
  7. 将以下代码粘贴到命令按钮的 Click 事件中:
    private void button1_Click(object sender, System.EventArgs e)
    {
       // Compare the two files that referenced in the textbox controls.
       if (FileCompare(this.textBox1.Text, this.textBox2.Text))
          {
             MessageBox.Show("Files are equal.");
          }
       else
          {
             MessageBox.Show("Files are not equal.");
          }  
    } 
    					
  8. 保存并运行该示例。
  9. 提供到在的文本框中的两个文件完整路径,然后单击命令按钮。

参考

有关详细的信息,请访问以下 Microsoft 网站:
System.IO 命名空间
(http://msdn2.microsoft.com/en-us/library/system.io(vs.71).aspx
通过发现类的文件访问
(http://msdn2.microsoft.com/en-us/library/Aa903246(VS.71).aspx

属性

文章编号: 320348 - 最后修改: 2007年11月26日 - 修订: 1.6
这篇文章中的信息适用于:
  • Microsoft Visual C# .NET 2002 标准版
  • Microsoft Visual C# 2005 Express Edition
关键字:?
kbmt kbhowtomaster kbio KB320348 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 320348
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com