现在有一个要实现的程序 找了好多人都解决不了 都是一些没有意义的回答!、程序要求是这样的:
要求可以将多个文件格式不一样的文件合并成一个,合并出来的文件格式可以自定义格式!并且能够打开!
请各位大侠指点思路啊 我对编码格式一点都不懂~!!指点一下吧~~最好能给出这个程序 并加以说明
我会追加分数的
要求可以将多个文件格式不一样的文件合并成一个,合并出来的文件格式可以自定义格式!并且能够打开!
请各位大侠指点思路啊 我对编码格式一点都不懂~!!指点一下吧~~最好能给出这个程序 并加以说明
我会追加分数的
难道你想把一个JPG文件和一个TXT文件合并在一起,然后还希望能再还原成JPG TXT?
你说得太笼统了
支持ing ,不论是什么文档都能用记事本打开,编码不同而已,剩下的就是你理解的能力了
如果只是合并文件并且只在自己程序里打开..那问题就简单多了定义两个结构体 public struct FilePackList
{
/// <summary>
/// 文件头长度 包含 FileHeadList总长度
/// </summary>
public ulong HeadLegth; /// <summary>
/// 文件的数量
/// </summary>
public uint FileCount; /// <summary>
/// 文件信息
/// </summary>
public FileHead[] FileHeadList;
} public struct FileHead
{
/// <summary>
/// 文件名长度
/// </summary>
public ushort FileNameLegth; /// <summary>
/// 文件名
/// </summary>
public byte[] FileName; /// <summary>
/// 开始位置
/// </summary>
public int StarRVA; /// <summary>
/// 文件大小
/// </summary>
public int FileLength;
}然后但这个格式写信息就可以了..先附值文件名,文件名的长度和文件大小..然后计算所有列表和文件头大小..然后循环你要保存的文件RVA=结构体长度+上一个文件长度.如果上是第1个文件RVA就写成结构体长度合.计算完成后写入文件..然后根据顺序把文件写到文件里就可以了..写会了读不难把.
谢谢你们了!
你先去了解GIS图片的结构...了解了结构再去搞合并...
这位朋友: 首先 十分感谢你!
我要做的是GIS方面的图片合并,合并之后生成的新格式就像WORD文档插入了两张图片一样以WORD德方式打开了!! 我对文件编码一窍不通 包括所说的文件头等等 不知道程序如何获取一个文件头!! 我现在想要的是一个设计思路 西安写一份设计文档出来给导师看
把啥类型的文件,都压缩到一个zip,然后用自己的程序再解压出来呵呵
各种格式的源文件、合并、还原,三大功能都实现了
有道理.....打开后就是一个.aspx文件哈哈..............
呵呵 序列化吧
so,你的问题根本就是啥压缩合并问题,你的问题是设计一个类似photoshop psd文件那样的,同时能保存底图和图层的文件格式。呵呵,如果只是设计格式,那就没啥好说的了,最简单的就是 直接设计一个 可序列化的类 直接序列化保存就是了,至于是加密与否看你自己的意愿了
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;namespace ConsoleApplication22
{
class Program
{
const String ObjectFileName = @"c:\A.ALL"; static void Main(string[] args)
{
File.Delete(ObjectFileName);
AppendFile(@"c:\windows\system.ini");
AppendFile(@"c:\windows\regedit.exe");
Console.WriteLine("合并完成");
ExtractFile(@"system.ini", @"c:\system2.ini");
ExtractFile(@"regedit.exe", @"c:\regedit2.exe");
Console.WriteLine("分解完成");
Console.Read(); } static void AppendFile(String AppendFileName)
{
FileStream ObjectFS = null;
FileStream FS = null;
try
{
ObjectFS = new FileStream(ObjectFileName, FileMode.Append);
FS = new FileStream(AppendFileName, FileMode.Open);
ObjectFS.Seek(0, SeekOrigin.End);
char[] Length = new char[10];
FS.Length.ToString().CopyTo(0, Length, 0, FS.Length.ToString().Length);
foreach (char C in Length)
ObjectFS.WriteByte((byte)C);
char[] Name = new char[256];
Path.GetFileName(AppendFileName).CopyTo(0, Name, 0, Path.GetFileName(AppendFileName).Length);
foreach (char C in Name)
ObjectFS.WriteByte((byte)C);
FS.Seek(0, SeekOrigin.Begin);
while (FS.Position < FS.Length)
ObjectFS.WriteByte((byte)FS.ReadByte());
}
finally
{
if (FS != null)
FS.Close();
if (ObjectFS != null)
ObjectFS.Close();
}
} static void ExtractFile(String ExtractFileName, String SaveToFileName)
{
FileStream ObjectFS = null;
FileStream FS = null;
try
{
ObjectFS = new FileStream(ObjectFileName, FileMode.OpenOrCreate);
ObjectFS.Seek(0, SeekOrigin.Begin);
byte[] FileLength = new byte[10];
ObjectFS.Read(FileLength, 0, 10);
String LengthString = String.Empty;
foreach (byte B in FileLength)
LengthString += (char)B;
int Length = int.Parse(LengthString);
byte[] FileName = new byte[256];
ObjectFS.Read(FileName, 0, 256);
String Name = String.Empty;
foreach (byte B in FileName)
if ((char)B != '\0')
Name += (char)B;
else
break;
while (Name != ExtractFileName)
{
ObjectFS.Seek(Length, SeekOrigin.Current);
int x = ObjectFS.Read(FileLength, 0, 10);
LengthString = String.Empty;
foreach (byte B in FileLength)
LengthString += (char)B;
Length = int.Parse(LengthString.Trim());
ObjectFS.Read(FileName, 0, 256);
Name = String.Empty;
foreach (byte B in FileName)
if ((char)B != '\0')
Name += (char)B;
else
break;
}
if (ObjectFS.Position < ObjectFS.Length)
{
FS = new FileStream(SaveToFileName, FileMode.Create);
for (int i = 0; i < Length; i++)
FS.WriteByte((byte)ObjectFS.ReadByte());
}
}
finally
{
if (FS != null)
FS.Close();
if (ObjectFS != null)
ObjectFS.Close();
}
}
}
}