c# – 读/写字符串二进制数据 – BinaryReader
发布时间:2020-12-15 17:21:54 所属栏目:百科 来源:网络整理
导读:我编写了下面的方法,使用二进制模式将文件存档到一个文件中: // Compile archive public void CompileArchive(string FilePath,ListView FilesList,Label Status,ProgressBar Progress) { FileTemplate TempFile = new FileTemplate(); if (FilesList.Items
我编写了下面的方法,使用二进制模式将文件存档到一个文件中:
// Compile archive public void CompileArchive(string FilePath,ListView FilesList,Label Status,ProgressBar Progress) { FileTemplate TempFile = new FileTemplate(); if (FilesList.Items.Count > 0) { BinaryWriter Writer = new BinaryWriter(File.Open(FilePath,FileMode.Create),System.Text.Encoding.ASCII); Progress.Maximum = FilesList.Items.Count - 1; Writer.Write((long)FilesList.Items.Count); for (int i = 0; i <= FilesList.Items.Count - 1; i++) { TempFile.Name = FilesList.Items[i].SubItems[1].Text; TempFile.Path = "%ARCHIVE%"; TempFile.Data = this.ReadFileData(FilesList.Items[i].SubItems[2].Text + "" + TempFile.Name); Writer.Write(TempFile.Name); Writer.Write(TempFile.Path); Writer.Write(TempFile.Data); Status.Text = "Status: Writing '" + TempFile.Name + "'"; Progress.Value = i; } Writer.Close(); Status.Text = "Status: None"; Progress.Value = 0; } } 我使用ReadFileData读取文件数据,该方法在上面的方法中返回一串数据. (StreamReader)接下来我提取我的档案.一切都做得很好,但是存储在提取方法中的数据并没有给我正确的数据,因此提取的文件没有正确的数据来显示其原始功能. 提取方法: // Extract archive public void ExtractArchive(string ArchivePath,string ExtractPath,ProgressBar Progress) { FileTemplate TempFile = new FileTemplate(); BinaryReader Reader = new BinaryReader(File.Open(ArchivePath,FileMode.Open),System.Text.Encoding.ASCII); long Count = Reader.ReadInt64(); if (Count > 0) { Progress.Maximum = (int)Count - 1; FilesList.Items.Clear(); for (int i = 0; i <= Count - 1; i++) { TempFile.Name = Reader.ReadString(); TempFile.Path = Reader.ReadString(); TempFile.Data = Reader.ReadString(); Status.Text = "Status: Reading '" + TempFile.Name + "'"; Progress.Value = i; if (!Directory.Exists(ExtractPath)) { Directory.CreateDirectory(ExtractPath); } BinaryWriter Writer = new BinaryWriter(File.Open(ExtractPath + "" + TempFile.Name,System.Text.Encoding.ASCII); Writer.Write(TempFile.Data); Writer.Close(); string[] ItemArr = new string[] { i.ToString(),TempFile.Name,TempFile.Path }; ListViewItem ListItem = new ListViewItem(ItemArr); FilesList.Items.Add(ListItem); } Reader.Close(); Status.Text = "Status: None"; Progress.Value = 0; } } 结构: struct FileTemplate { public string Name,Path,Data; } 谢谢. 解决方法
考虑使用字节数组进行写入并保护数据安全.
字节数组(写) Byte[] bytes = File.ReadAllBytes(..); // Write it into your stream myStream.Write(bytes.Count); myStream.Write(bytes,bytes.Count); 字节数组(读) Int32 byteCount = myStream.ReadInt32(); Byte[] bytes = new Byte[byteCount]; myStream.Read(bytes,byteCount); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |