现在有一个要实现的程序  找了好多人都解决不了  都是一些没有意义的回答!、程序要求是这样的:
要求可以将多个文件格式不一样的文件合并成一个,合并出来的文件格式可以自定义格式!并且能够打开!  
请各位大侠指点思路啊  我对编码格式一点都不懂~!!指点一下吧~~最好能给出这个程序  并加以说明
我会追加分数的

解决方案 »

  1.   

    最好说说是哪一些文件格式。
    难道你想把一个JPG文件和一个TXT文件合并在一起,然后还希望能再还原成JPG TXT?
    你说得太笼统了
      

  2.   


    支持ing ,不论是什么文档都能用记事本打开,编码不同而已,剩下的就是你理解的能力了
      

  3.   

    我不是很理解你的文件合并成一个...合并后能打开是指在你自己的程序里打开把. 
    如果只是合并文件并且只在自己程序里打开..那问题就简单多了定义两个结构体        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就写成结构体长度合.计算完成后写入文件..然后根据顺序把文件写到文件里就可以了..写会了读不难把.
      

  4.   

    我补充一下  我想实现的是GIS图片方面合并的东西!就是矢量图、卫星图等的合并  请大家给点设计思路  包括再把文件分解的过程!  
    谢谢你们了!
      

  5.   


    你先去了解GIS图片的结构...了解了结构再去搞合并...
      

  6.   

    upexe  xls  doc  wav  mp3 合并了能打開嗎?
      

  7.   


    这位朋友:  首先  十分感谢你!
     我要做的是GIS方面的图片合并,合并之后生成的新格式就像WORD文档插入了两张图片一样以WORD德方式打开了!!  我对文件编码一窍不通  包括所说的文件头等等   不知道程序如何获取一个文件头!!  我现在想要的是一个设计思路  西安写一份设计文档出来给导师看
      

  8.   

    写个类似winRar的压缩文件就是了
    把啥类型的文件,都压缩到一个zip,然后用自己的程序再解压出来呵呵
    各种格式的源文件、合并、还原,三大功能都实现了
      

  9.   


    有道理.....打开后就是一个.aspx文件哈哈..............
      

  10.   

    txt GIF  swf 3文件揉成一个什么格式?
    呵呵 序列化吧
      

  11.   

    哎,Gis有这么搞滴吗??好像没有吧??底图是底图,图层是图层。就是photo shop都没这么搞滴,在photoshop里一旦把图层合并,你就解不开了
    so,你的问题根本就是啥压缩合并问题,你的问题是设计一个类似photoshop psd文件那样的,同时能保存底图和图层的文件格式。呵呵,如果只是设计格式,那就没啥好说的了,最简单的就是 直接设计一个 可序列化的类 直接序列化保存就是了,至于是加密与否看你自己的意愿了
      

  12.   

    写完了,测试通过,主要是lz分不够吧。。
    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();
                }
            }
        }
    }
      

  13.   

    GIS 矢量图原先研究过MapX,利用MapXLib提供的方法可以实现添加图层及保存等,LZ不妨看看这方面的资料吧。MapX培训教材