问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

net怎么将多个ppt文件的内容合并成一个ppt文件

发布网友 发布时间:2022-04-29 07:46

我来回答

2个回答

懂视网 时间:2022-05-19 18:33

以上列表中的文件并不是来自于某个文件夹中的所有jpg文件,而是来自于

这个文件。
将多个文件合并为一个文件在许多应用领域都十分有用。亲自实现这样一个程序一定不但过瘾且在许多时候可以帮助我们构建更高效的程序。这里我做了一个方案例分享给大家。
由于合并后的文件就像一个包裹,所以下文中都把这样的文件称为“包文件”
主构思:
要把多个文件合并成一个包文件,还要可以区分其中的某个文件并提取出来。我们需要知道文件的名称和这个文件在包文件中的位置及长度,也就是所谓的地址偏移。
由于包文件常常会比较大,所以不应该让它的内容常驻于内存,只应该需要某部分的时候再从包文件中提取。
我是这样做的:

一个管理器类,提供一些外围的方法
_pathList用于存放要添加到包文件的文件路径,通过调用AddSourceFile()方法添加
_pf 是具体的包文件,通过LoadPackFile() 生成实例,通过CurrentPackFile属性返回
Build方法用于生成包文件

PackFile类作为PackFileManager的嵌套类,它提供包文件的属性和施工细节。
好了,我们先来看看PackFileManager.Build()方法
代码如下:
           public void Build(string path)
        {
            using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write))
            {
                BinaryWriter bw = new BinaryWriter(fs);
                bw.Write("PackFile");
                bw.Write(this._pathList.Count);
                foreach (string f in this._pathList)
                {
                    FileInfo fi = new FileInfo(f);
                    bw.Write(fi.Length);
                    fi = null;
                }
                foreach (string f in this._pathList)
                {
                    bw.Write(Path.GetFileName(f));
                }
                foreach (string f in this._pathList)
                {
                    bw.Write(File.ReadAllBytes(f));
                    bw.Flush();
                }
            }
        }

1. 先写个“PackFile”字符串到文件头
2. 把以Int32为类型的,要输出到包文件中的文件数量写入
3. 把以long为类型的,要输出到包文件中的每个文件的长度写入。
4. 再把每个文件名写入
5. 最后写入每个文件的实体内容。
由于在写或读时不频繁在Write方法或ReadXXX方法的不同版本间频繁切换,所以我想这样组织文件结构可以更高效一些。

疑问来了。在写入文件名的时候,我们使用bw.Write(Path.GetFileName(f));
调用了BinaryWriter.Write(string value),传入的是字符串,那么在读取的时候要调用BinaryReader.ReadString()。这时它是如何区分两个字符串边界的。还好,Write方法会先将字符串长度作为一个四字节无符号整数写入,于是在用BinaryReader.ReadString()的时候它会根据这个值来读取特定长度的值,并理解为字符串。
这里列出几个重要方法:
代码如下:
PackFileManager的LoadPackFile方法
       public void LoadPackFile(string path)
        {
            if (!File.Exists(path))
            {
                throw new FileNotFoundException(path);
            }
            if (_pf != null)
            {
                _pf.Close();
                _pf = null;
            }
            FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fs);
            if (br.ReadString() != "PackFile")
            {
                throw new InvalidCoalescentFileException("该文件不是有效的包文件");
            }
            this._pf = new PackFile(fs,br);
        }

此时,我们在生成时写入的字符串"PackFile" 就有了明确的功能
PackFile的构造函数
代码如下:
        internal PackFile(FileStream srcFile,BinaryReader br)
            {
                this._sourceFile = srcFile;
                _br = br;
                this._fileCount = _br.ReadInt32();//取文件数
                for (int i = 1; i <= _fileCount; i++)
                {
                    this._fileLengthList.Add(_br.ReadInt64());
                }
                for (int i = 1; i <= _fileCount; i++)
                {
                    this._shortNameList.Add(_br.ReadString());
                }
                this._contentStartPos = _sourceFile.Position;//设置实体文件总起始位置
            }
 
PackFile.GetBytes()
代码如下:
            public byte[] GetBytes(int index)
            {
                long startPos = this._contentStartPos;
                for (int i = 0; i < index; i++)
                {
                    startPos += this._fileLengthList[i];
                }
                _sourceFile.Position = startPos; //设置某文件内容的起始位置
                return _br.ReadBytes((int)_fileLengthList[index]);
            }

这只是一个草案,我们还可以加入压缩、或是像ZIP文件那样的嵌套文件夹功能,改进后的代码别忘与我分享哦。

热心网友 时间:2022-05-19 15:41

参照PPT2007中的两种方法:
方法1:PT2007中可以在开始……新建幻灯片……重用幻灯片……右窗格浏览中找到要插入的幻灯片文件……打开……保留源格式……单击左窗格某张小幻灯片下方(要插入的位置)……单击右窗格要插入的幻灯片就行了。
方法2:在幻灯片浏览视图复制……粘贴即可。各个版本差不多,PPT2007中合并方法:1、打开第一个PPT------视图------幻灯片浏览-----在浏览视图中按ctrl键分别单击选中所需幻灯片(ctrl+A全选)后右击-----复制。2、打开另一个PPT,在浏览视图要插入幻灯片处单击、有光标闪动,右击----粘贴即可。注意:粘贴后出现一个小图标,单击有选项,选择“保留源格式”可使背景等保持不变。在幻灯片浏览视图中单击选中幻灯片后拖动可调整幻灯片的顺序。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
人大政协辅助岗是什么 政务辅助人员是干什么 政府辅助人员是什么 努比亚的海拔什么意思 北非努比亚现在怎么样了啊 相邻权的相关法律 梦见老公离世了什么预兆 梦见自己老公走掉 你出轨后 怎么操作才没被发现? 评评怎么造句 怎么快速制作内容很多的幻灯片 [动态ppt制作]教你一招,PPT页面内容超多该怎么办 ppt 页面内容过多,刷新不停,怎么办? PPt一页中的内容过多,怎么弄到下一页浏览啊? 如何在PPT中一页显示较多文本内容 如何轻松搞定内容过多的PPT 有没有个人支付接口,个人微信支付,个人支付宝支付 当前页面脚本发生错误。始终打不开文档,怎么解决? “当前页面的脚本发生错误”是什么意思?我应该怎么办? proe启动时报告脚本错误,怎么解决? 上海新致软件有限公司是做外包的吗 新致软件和西安文思创新那个好~~~急求 上海新致软件股份有限公司北京分公司怎么样? 新致软件公司好吗? 新致软件怎么样? 生活离不开选择啊?大家认为新致软件公司怎么样?有知道的吗??? 大家有没有知道“北京新致软件”公司的?怎么样啊? 上海新致软件有限公司怎么样 深圳新致软件有限公司怎么样? 上海新致软件有限公司规模有多大?工资有多高呢?工作压力大不大? Win10 鼠标右键点击就发生黑屏了还有文件夹被关闭了 win10怎么右键不能用,点击右键就是刷新黑屏一下 win10系统 右键点击桌面文件之后一会就黑屏1、2秒然后回到桌面像刷新一遍一样是怎么回事?大神求救 js 键盘事件 怎么实现? 怎么折纸篮子 简单篮子的折法图解教程 小篮子是怎么折的(图解) 折纸小篮子怎么折来? 梦见上战场杀鬼子缴了一只枪 梦见上战场杀敌,杀了很多人还伤了很多人是怎么回事呢 ...这几天一直做一个梦梦见我回到抗战时期杀鬼子当我被鬼子的刺刀杀死... 用js写了一段按键控制的代码,就是按键盘上的方向键,然后对应的元素往左右上下移动 梦见和老公的嫂子说话? 男,为什么晚上会梦见和老婆的嫂子说话,使劲的追求老婆的嫂子, 请问?我昨晚做了个梦梦见嫂子对我笑这什么兆头啊? 梦见和己故的嫂子搂在一起说话然后我也死了? 梦见自己家的嫂子笑还吃饭 梦见和嫂子弟弟聊天并且心里有对方为什么? 吃西瓜可以帮助减肥吗? 吃西瓜会减肥吗? 吃西瓜可以减肥吗???