【问题标题】:How to read .DAT file in c#如何在 C# 中读取 .DAT 文件
【发布时间】:2015-04-27 19:35:20
【问题描述】:

我有一个 .DAT 文件,如果我在记事本中以文本形式打开它会给我像 #¨¤³¦+eäÌIóÆ‹,j° 这样的值。我从一台机器上得到这个文件,我有一个文档可以手动打开这个文件。按照那个

1. Rename each file extensions of TAXA files from .DAT to .GZ
2. Uncompress (or unzip) all TAXAxxxx.GZ (you can use ZIP)
3. After the file extractions, rename each file with file extensions as TAXAxxxx.TXT

这是我尝试过的代码..

        string str = "";
        BinaryReader br = new BinaryReader(File.OpenRead(@"F:\TAXAZ.DAT"));
        foreach (char ch in br.ReadChars(5000))
        str += ch;
        br.Dispose();

这是按照上面提到的说明手动发生的,但是当我尝试以编程方式进行时,它没有发生。我尝试了压缩和解压缩概念,但它是徒劳的。后来我尝试读取二进制文件,然后转换为string 但那也没用。 请帮助我将此文件作为文本阅读。 谢谢..

【问题讨论】:

  • 确切地告诉我们你尝试了什么。
  • 当你解压它时,你有没有从那个过程中得到一堆文件?您是要从代码或资源管理器窗口中解压缩吗?
  • @EBrown 我用我尝试过的代码更新了我的帖子..请帮助我..
  • 第 2 步告诉您解压缩文件,您的代码不会尝试这样做。
  • @ScottChamberlain 这就是我落后的地方。你能告诉我如何解压缩文件

标签: c# .net io


【解决方案1】:

您的说明说您必须将 .dat 重命名为 .gz,解压缩,然后读取文件。 您的代码正在跳过前两个步骤,只是尝试读取文件。这就是它不起作用的原因。

您可以在 C# 中执行此操作,但您需要对其进行解压缩。您可以使用System.IO.Compression.GZipStream 来执行此操作。

来自该链接的示例 C# 代码:

using System;
using System.IO;
using System.IO.Compression;

namespace zip
{
    public class Program
    {
        private static string directoryPath = @"c:\temp";
        public static void Main()
        {
            DirectoryInfo directorySelected = new DirectoryInfo(directoryPath);
            Compress(directorySelected);

            foreach (FileInfo fileToDecompress in directorySelected.GetFiles("*.gz"))
            {
                Decompress(fileToDecompress);
            }
        }

        public static void Compress(DirectoryInfo directorySelected)
        {
            foreach (FileInfo fileToCompress in directorySelected.GetFiles())
            {
                using (FileStream originalFileStream = fileToCompress.OpenRead())
                {
                    if ((File.GetAttributes(fileToCompress.FullName) & 
                       FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".gz")
                    {
                        using (FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".gz"))
                        {
                            using (GZipStream compressionStream = new GZipStream(compressedFileStream, 
                               CompressionMode.Compress))
                            {
                                originalFileStream.CopyTo(compressionStream);

                            }
                        }
                        FileInfo info = new FileInfo(directoryPath + "\\" + fileToCompress.Name + ".gz");
                        Console.WriteLine("Compressed {0} from {1} to {2} bytes.",
                        fileToCompress.Name, fileToCompress.Length.ToString(), info.Length.ToString());
                    }

                }
            }
        }

        public static void Decompress(FileInfo fileToDecompress)
        {
            using (FileStream originalFileStream = fileToDecompress.OpenRead())
            {
                string currentFileName = fileToDecompress.FullName;
                string newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress.Extension.Length);

                using (FileStream decompressedFileStream = File.Create(newFileName))
                {
                    using (GZipStream decompressionStream = new GZipStream(originalFileStream, CompressionMode.Decompress))
                    {
                        decompressionStream.CopyTo(decompressedFileStream);
                        Console.WriteLine("Decompressed: {0}", fileToDecompress.Name);
                    }
                }
            }
        }
    }
}

【讨论】:

  • 感谢您分享代码..我尝试执行此代码,但根据我的要求,我需要压缩和解压缩.DAT 文件而不是目录或文件夹。怎么做..我试图但它给了我错误..请帮助我..
  • 我从网站上复制了整个示例,但您只需要这里的解压缩功能。为您的 .dat 文件传入一个 FileInfo。那应该解压缩它并将文件写入磁盘。如果您不想将 decompressionStream 写入磁盘,您可以更改它的用途。
  • 好的。我手动将文件的扩展名更改为.gz,然后尝试使用您共享的代码的解压缩功能解压同一文件,但出现以下错误..`魔术数字GZip 标头中的不正确。确保您传递的是 GZip 流。这是什么以及如何解决?
  • 请帮帮我先生..我尽我所能得到解决方案,但无法获得成功..请
猜你喜欢
  • 1970-01-01
  • 2016-03-18
  • 1970-01-01
  • 2019-08-25
  • 1970-01-01
  • 2020-12-31
  • 2020-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多