文件类型(共5篇)
文件类型 篇1
0 引言
Visual C++.NET(以下简称VC++.NET)是VisualStudio.NET 家族中的一员,是Microsoft 公司基于最新的.NET思想开发的以C++语言为基础的可视化集成开发工具,与其他编程语言Visual Basic.NET、Visual C#.NET等一起共同使用Visual Studio.NET的集成开发环境(IDE)。在建立应用程序时,VC++.NET为用户提供了“对话框”、“单文档”、“多文档”和“多顶级文档”四种模式的应用程序框架选择。运用“多文档”应用程序框架,可以实现在一个程序框架下对多个文档编辑。通常情况下,VC++.NET直接生成的多文档应用程序框架只能编辑一种类型的文档;然而,在许多情况下,只需要对多种类型的文件进行管理。例如,一个图像处理软件需要处理位图(bmp)图像、JPEG图像,Gif图像等多种类型的图像格式文件。针对默认的多文档应用程序框架不能管理多种类型文件的不足,本文介绍一种利用VC++管理多种类型文件的方法,该方法主要通过修改多文档应用程序的实例化函数,实现在一个多文档应用程序中管理多种类型文件。为了便于说明,本文通过一个实例的设计来阐述方法的具体使用步骤,该实例的主要功能有两个:一是文字编辑,我们定义他是以扩展名.tt结尾的文件;二是位图浏览[1],实现对扩展名为.bmp的图像浏览。
1 文件管理
在VC++.NET中,每一种文件类型都对应着一种文档模板,该文档模板可以将一个文档同一个特定的文件扩展名(即文件类型)联系起来,以方便对该类型文件的保存、打开等操作进行管理[2]。在多文档应用程序框架中,应用程序使用文档/视图(Document/View)结构来对文件进行管理,文档类主要负责文件数据的管理,视图类主要负责对文件数据的可视化表示。通常情况下,一种文件类型对应着一个文档类和一个视图类(一个文档类和一个视图类可以对应多种文件类型);因此,在多文档应用程序框架中,如果要对一种新的文件类型进行管理,则需要为该文件类型添加一个新的文档类和视图类。由于不同的文件类型有不同的管理操作,所以需要为其添加相应的操作菜单。此外,还需要在字符串表中定义一个字符串以表示文件的扩展名。
CMultiDocTemplate定义了一类文档模板,通过使用CMultiDocTemplate对象记录文件类型、文档以及应用程序所使用的显示窗口类三者之间的关系。应用程序新增管理一种文件类型,需要增加一个新的CMultiDocTemplate对象,然后使用CWinApp类的AddDocTemplate函数为应用程序注册该文档模板。
2 方法步骤
为一个多文档应用程序增加管理一种新文件类型的主要步骤如下:
(1)创建文档类管理为新文件类型的数据。
(2)创建视图类以表达文件的内容。
(3)创建该文件类型的操作菜单,表示扩展名的字符串,文档图标,快捷键等资源。
(4)创建CMultiDocTemplate对象,将文档类,视图类和相关资源关联起来。
(5)运用AddDocTemplate为应用程序注册该文件类型。
3 函数说明
在进行实例设计前,对所用到的几个主要函数进行说明,以方便理解。
(1) CMultiDocTemplate( UINT nIDResource, CRuntimeClass* pDocClass, CRuntimeClass* pFrameClass, CRuntimeClass* pViewClass )
该函数为CMultiDocTemplate类的构造函数,他构造生成了一个文档模板对象,同时声明了该对象所对应的文档类(pDocClass),视图类(pViewClass),资源(nIDResource),以及显示窗口类(pFrameClass)。
(2) void AddDocTemplate(CDocTemplate* pTemplate )
这是CWinApp类的一个成员函数,主要实现为应用程序注册一个文档模板(pTemplate)。
(3)HANDLE LoadImage(HINSTANCE hinst,LPCTSTR lpszName,UINT uType,int cxDesired, int cyDesired,UINT fuLoad)
该函数用于加载位图、光标、图标等多种资源。其中,参数hinst为包含要载入位图的模块的实例句柄;参数lpszName为要载入的图像文件名;参数uType为要载入的图像的类型,可以取IMAGE-BITMAP(位图),IMAGE-CURSOR(光标),IMAGE-ICON(图标)值之一;参数cxDesired与cyDesired分别定义了要载入的图像的宽度和高度;参数fuLoad为可选项,指定了载入图像的特性。
(4) BOOL BitBlt(int x,int y,int nWidth,int nHeight,CDC* pSrcDC,int xSrc,int ySrc, DWORD dwRop)
这是CDC类的一个成员函数,用于将图形数据从一个位置传送到另一个位置,源和目标可以是同一个设备文本对象,也可以是不同的设备文本对象。其中,参数(x,y)是目标矩形区域的左上角坐标;nWidth和nHeight是目标区域的宽度和高度;pSrcDC是指向源设备文本对象的指针;(xSrc,ySrc)是源位图的左上角坐标;dwRop指的是光栅操作码,决定了位图的显示方式,若dwRop取SRCCOPY,表示将源位图复制到目标位图上。
4 实例设计
本文建立了一个管理两种文件类型的多文档应用程序,一种是扩展名为.TT的文件,另外一种是扩展名为.bmp的位图图像。以下是实例设计中的几个关键步骤及相关代码:
(1) 建立一个VC++.NET新项目
启动Visual Studio.NET,新建一个VC++项目,选中MFC应用程序,名称为MultiFile。在应用程序类型步骤中,选择“多文档”;由于应用程序的一个目的是能实现文字编辑,所以视图类的基类选择编辑功能强大的CRichEditView类,如图1所示。
(2) 修改字符串IDR-MultiFileTYPE
IDR-MultiFileTYPE声明了与CMultiFileDoc,CMultiFileView所关联的文件类型,将其内容改为:“TTTTTT(*.TT).TTMultiFile.DocumentMultiFile.Document”;表明该文字编辑器管理的文件是以.TT为文件扩展名。只需要修改字符串中的“TT”,即可定义自己喜欢的后缀名。
(3) 在类视图中,添加管理位图的文档类CBmpDoc,他共有继承于CDocument类,同时添加如下几个公有的成员变量:
int m-state; // 位图显示的状态 0不显示,1显示,需在CBmpDoc构造函数中初始为0
CBitmap m-bitmap; // 创建位图对象
BITMAP m-bm; // BITMAP 结构体
同时,添加一个公有的函数接口以加载位图,具体如下:
void CBmpDoc::ShowBitmap(CString BmpName)
{ //从指定路径文件名上加载位图,并获取该位图的句柄
HBITMAP hBitmap=(HBITMAP) LoadImage(NULL,-T(BmpName),IMAGE-BITMAP ,0,0,LR-CREATEDIBSECTION|LR-DEFAULTSIZE|LR-LOADFROMFILE);
m-bitmap.Attach(hBitmap); //为位图对象添加位图句柄
m-bitmap.GetBitmap(&m-bm); //获取位图的属性信息
}
另外,重写虚函数OnOpenDocument(LPCTSTR lpszPathName),具体如下:
BOOL CBmpDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName)) return FALSE;
ShowBitmap(lpszPathName); //通过指定的路径加载位图
m-state=1; //将显示标志改为1
return TRUE;
}
(4) 在类视图中,添加显示位图的视图类CBmpView,他共有继承于CScrollView类,接着修改OnDraw()函数,以显示所加载的位图;如果位图是通过“新建”产生的(pDoc→m-state为0),则给出相应的提示信息。
void CBmpView::OnDraw(CDC* pDC)
{
CBmpDoc* pDoc=(CBmpDoc *) GetDocument();
if (pDoc→m-state==0) //没有位图信息,如新建的位图文件
{
CString str=″还没有相关的位图信息!″;
pDC→TextOut(10,10,str); //输出文本提示信息
}else
{ CDC dcImage; //创建CDC类的对象
if (!dcImage.CreateCompatibleDC(pDC)) return; //创建内存设备文本对象,失败则返回
dcImage.SelectObject(&pDoc→m-bitmap); //将位图选入设备文本对象
//显示图像
pDC→BitBlt(0,0,pDoc→m-bm.bmWidth,pDoc→m-bm.bmHeight,&dcImage,0,0,SRCCOPY);
}
}
(5) 在字符表中建立IDR-BMP字符串
字符串IDR-BMP声明了与CBmpDoc,CBmpView所关联的文件类型,其内容为“BMPBMPBMP(*.BMP).BMPBMP.DocumentBMP.Document”,表明文件的扩展名为.BMP。
(6) 在图标资源中,创建.BMP文档的显示图标,命名为IDR-BMP。
(7) 在菜单资源中,创建一个名为IDR-BMP的菜单,其内容与IDR-MAINFRAME相同(可通过复制实现)。
(8) 修改应用程序的实例化函数InitInstance(),构造BMP文档模板,并将其添加到应用程序中,具体位置为创建主 MDI 框架窗口的代码前面,详细的代码如下:
CMultiDocTemplate* pBmpDocTemplate; //构造一个位图文档模板
pBmpDocTemplate=new CMultiDocTemplate(IDR-BMP,RUNTIME-CLASS(CBmpDoc),
RUNTIME-CLASS(CChildFrame), RUNTIME-CLASS(CBmpView));
if (!pBmpDocTemplate) return FALSE;
pBmpDocTemplate→SetContainerInfo(IDR-BMP);
AddDocTemplate(pBmpDocTemplate); //添加位图类型文档模板
至此,整个实例已经建立完毕,生成整个解决方案并运行程序将出现如图2所示的界面。该界面是让用户选择新建文件的类型,鉴于本文的目的是解决如何管理多种类型文件的接口问题,并非实现具体的某种文件类型管理,因此系统并不包含创建bmp图像的代码。选择“TT”可新建一个扩展名为TT的文件,然后可以直接输入相关文字进行编辑处理;从菜单中选择“文件→打开”,打开一个位图便可显示出其具体的图像。此时,可以看见TT文件和位图在同一个应用程序框架下显示,具体如图3所示。
5 结束语
本文研究了在VC++.NET中如何通过多文档应用程序管理多种类型文件的接口问题,归纳出新增一种文件类型所需要的主要步骤,设计并实现了一个多文档应用程序,该程序可以实现.TT文件类型和.BMP文件类型的同时显示。文中的代码已经在Visual Studio.Net 2003 中文版下编译通过,运行正常;同时,这些代码也适用于其他版本的Visual C++。应用文中的方法可有效解决多种类型文件在同一个应用程序管理的接口问题,为多种类型文件的进一步编辑处理打下了基础,具有较强的实用性。
参考文献
[1]张红中,等.Visual C++.NET范例入门与提高[M].清华大学出版社,2003:179-182.
[2]郭庆民,黄业清.Visual C++高级界面特效制作百例[M].中国电力出版社,2000:16-31.
文件类型 篇2
漏洞分析:
IIS支持以CGI的方式运行PHP,但是此种模式下,IIS处理请求的时候可能导致一些同80sec提到的nginx安全漏洞一样的问题,任何用户可以远程将任何类型的文件以PHP的方式去解析,你可以通过查看Phpinfo中对php的支持方式,其中如果为CGI/FAST-CGI就可能存在这个问题,
黑盒访问
www.80sec.com/robots.txt/1.php
查看文件是否存在和返回的HTTP头就可以知道是否存在此漏洞。
同时,如果服务器支持了PHP,但应用中使用的是asp就可以通过如下方式来直接查看服务端asp源码
asp/1.php">www.80sec.com/some.asp/1.php
漏洞厂商:www.microsoft.com
解决方案:
我们已经尝试联系官方,但是此前你可以通过以下的方式来减少损失
文件类型 篇3
我们可以通过修改注册表键值来解决这个问题:
添加文件类型:打开注册表编辑器,定位到“HKEY—LOCAL_MACHINFSOFTWARE、Microsoft\MediaPlayer\Player\Extensions\Types”,这里已经存在了许多以自然数1、2、3…命名的字符串,所对应的键值就是出现在“文件类型”下拉列表框中的媒体文件格式。
现在,我们可以按照自然数的顺序自行添加新的字符串值,例如现有的序号排列至7,只要建立一个名为8的字符串值即可,接下来还必须将字符串值定义为所添加的媒体文件的扩展名,在这里输入“*.rm;*.rmvb”,注意这里请使用英文半角的分号隔开。
指定关联:定位到“HKEY LOCAL MACHINE\SOFTWARE\Micro soft\Mediaplayer\Player\Extensions\MUIDescriptions”,根据前面添加的序号名,在这里创建一个相同的字符串值,赋值为“@C:\WINDOWS\INF\UNREGMP2.EXE,-9922”,最后的“-9922”可以被修改为其他值,每一个值代表一种媒体文件的中文说明,例如“电影文件”、“Windows视频文件”、“媒体播放列表”,可以根据MUIDescripions中现有的字符串值,判断每个代码代表的具体含义,然后根据自己的需要选择一个最接近的说明即可,这里的“9922”表示“媒体播放列表”这个中文说明(如图)。
提示
第二个步骤中涉及的“@c:\WINDOws\INF\UNRE6MP2.EXE.-9922”,请注意“UNREGMP2.EXE”的实际路径,因为不同的系统可能有所不同,其它就没有什么需要注意的了。
修改完成后关闭注册表编辑器,重新打开WMP的打开对话框,此时你会发现“文件类型”下拉列表框中已经增加了“媒体文件列表*.RM;*.RMVB”这一项,也就是说以后你就可以在WMP中直接选择RM、RMVB格式的媒体文件,再不用通过“所有文件”逐个查找了。
力保暴风影音图标
一个好人
暴风影音官方无插件版无疑是广大用户的最爱,但如果你是在Windows Vista系统下安装暴风影音,那么会发现安装后它所关联的影音文件图标竟然都没有能够显示正确,假如你试图去修改关联,系统会提示“stormicl.dll不包含图标”。
最直接的方法当然是重新制作暴风影音的stormicl.dll文件,但需要相关的工作和图标资源,非常麻烦。其实,我们可以利用暴风影音安装目录下的stormicl.txt文件来进行修复,网上已经有高人提供了修改好的相关资源(已收入光盘),这是因为安装程序在创建关联时是按照这个文件中的内容来自动关联图标的,而“设置文件关联”这个步骤已经差不多是最后的一个步骤了,相关的文件已经写入系统,因此我们只要在此时将光盘中的文件解压缩后覆盖到安装目录下即可,例如“\Program Files\Ringz Studio\Storm Codec\”,然后就可以看到正确的图标了。
隐藏设定程序访问和默认值
花的神明
任意类型文件的数据库存取模型 篇4
在软件设计当中, 经常会涉及到多种类型文件数据的数据库存储和访问问题。把文件保存到数据库, 可以对文件进行更好的管理, 特别是文本文件、图片等, 随着文件数量的增加, 这个优势尤其明显。另外, 将文件全部放入数据库可以利用数据库的管理功能, 实现文字的处理、检索等。
软件设计中, 常见的文件类型主要是文本文件 (.TXT) 和图形文件 (.JPG、.BMP、.GIF) 两大类, 也会涉及音频文件、视频文件、带格式字符文件以及一些专门的格式, 譬如Rational Rose模型 (.MDL) 文件。在不同的设计环境下, 提供了若干种实现工具, 譬如在Visual Studio.NET中提供了专门的Image对象类以实现图片操作。但是, 对于一些特殊的文件, 由于没有这些方便之门, 操作起来比较麻烦。这里, 希望找到一种通用的操作方式解决任意类型文件在数据库中的存储与访问的问题。
作为一种通用的解决方案, 各种类型的文件在数据库内的存储可以选择两种方案。一种是数据库内存储文件的路径, 在需要引用文件时根据数据库内的路径从磁盘读取文件本身;一种是把文件本身以某种形式直接存入数据库。第一种方法的优点是比较容易实现, 但数据安全性低, 并且管理困难;第二种方法与第一种的优缺点刚好相反。这里讨论第二种方法。
下面讨论目前被广泛采用的.NET架构下的实现模型。
1 文件数据存储
数据库管理系统有很多, 常用的数据库管理系统有AC-CESS和SQL Server。ACCESS数据库虽然安全性不够高, 但是提供文件式的数据库服务, 不需要购买和配置专门的数据库管理系统, 仍然为设计人员所钟爱。SQL在数据库控制方面的能力比ACCESS强很多。这里以ACCESS和SQL Server为例进行讨论。
在ACCESS中, 为满足各种文件内容的需要, 选择“OLE对象”类型。
在SQL Server中, 可以选择Binary、varbinary、Image等3种二进制数据类型。Binary支持定长1-8000字节的二进制数据, varbinary支持变长1-8000字节的二进制数据, Image支持变长20亿字符的二进制数据。从常用和提高空间利用率考虑, 一般选择varbinary类型。
2 数据存取模型
.NET架构下, 提供的ADO.NET模型提供的对象可以实现此文件—数据库—文件的变换, 其过程描述为图1。涉及的对象有FileStream、Byte、ADO.NET。
FileStream类称为文件流, 是这里实现变换的关键。其允许直接从文件创建流对象, 以字节方式读写文件, 构造此对象时确定操作模式 (FileMode) , 主要的操作是Read、Write、Close。Read方法把FileStream内容读入到Byte数组;Write方法把By te数组的内容写入FileStream;Close方法关闭FileStream。
Byte是一种数据类型, 这里主要是构造Byte数组, 用以存储FileStream转换来的内容。
ADO.NET是.NET构架提供的数据库操作模型, 通过Conn ection、Command、Adapter、pbuilder、DataSet、Table、DataRow等一系列对象实现数据库的存储和访问。
SourceFile和DestFile分别代表需要存入数据库的文件和由数据库产生的文件。
DataBase表示一个抽象的数据库存储。
3 实现算法
下面的算法基于ADO.NET模型的脱机存取模式, 采用BASIC语法。
3.1 构造数据访问集合
在操作之前连接数据库, 构造数据集合, 大致分3步:
Step1连接并打开数据库;
Step2构造脱机访问数据表集合;
Step3从脱机访问数据表集合获取文件数据记录集。
3.2 导入文件到数据库
导入文件的过程描述为:根据文件建立文件流FileStream‘FileStream流变换为Byte数组’构造文件信息记录‘添加记录到文件数据记录集’更新数据库。
dadapter.Update (dset, “fileinfo”) //根据脱机访问数据表集合dset更新dadapter所连接的数据库中的文件数据表fileinfo
3.3 从数据库读取文件数据
读取文件数据的过程描述为:根据文件数据记录集ptable的文件内容属性生成Byte数组‘打开输出文件流->把Byte数组写入文件流FileStream’关闭文件流FileStream。
desfile.Close () //关闭文件流, 完成读取
通过以上步骤, 文件产生在DesFileName代表的文件中。
4 结束语
本文讨论了一种通用的文件存储于数据库的模型, 并根据这个模型实现了文件存储于数据库的算法。对于这个操作与其它数据操作的联合使用, 可以在此算法的基础上稍作变化以实现。
本文已经测试的文件类型包括*.wmv视频文件、*.txt纯文本文件、*.doc微软word文件、*.xls微软电子表格文件、*.pdf文件、*.exe执行文件、*.dat数据文件、*.vob视频文件、*.rar压缩文件、*.psd photoshop文件、*.mp3音频文件、*.mdl Rationa Rose模型文件、*.ppt微软演示文稿文件、*.mdb ACCESS数据库文件, 从这些比较有代表性的文件操作来看, 算法是有效的。
本文的实验环境为Visual BASIC.NET 2008+ACCESS2003+SQL Server 2005。
摘要:为了保证文件的安全性并便于管理, 经常需要把文件存入数据库。讨论了实现文件存储于数据库的一种通用存取模型, 根据这一模型实现文件存储于数据库的算法。
关键词:文件,数据库,存取模型
参考文献
[1]国刚, 周峰, 孙更新.UML与Rational Rose2003软件工程统一建模原理与实践教程[M].北京:电子工业出版社, 2007.
[2]王华杰, 张帆, 戴伯勇.Visual Studio.NET程序设计教程[M].北京:中国铁道出版社, 2003.
[3]吕文达.精通C#程序设计[M].北京:清华大学出版社, 2006.
文件类型 篇5
引入:
今,俺与一朋友聊天,他开口便道“累、烦、郁闷”;俺经过询问,方知缘由;
他的情况是这样的:
他负责接收单位职工的工作心得体会,单位要求接收电子版的,而不需要打印版;所以,他的麻烦就来了;他们单位的职工懂计算机的不多,有的人使用记事本写心得体会,有的人使用WORD写心得体会(这还算差不多),有的人不知道怎么弄的,交来一个只有文字的网页,里面便是心得体会;
这下他可烦了,打开不同类型的文件,有多麻烦啊,职工又多,不打开又无法进行检查与统计;如果打开的窗口多了,自己也累,加上不同类型的文件使用不同软件打开,更让他差点“气绝”……
对于这么罗嗦的问题,找俺算是找到救星了,以下是俺给他提供的解决办法;
所使用的功能是word里面的“插入”→“文件”功能;
首先打开一空白的word文档,执行操作:“插入”→“文件”;弹出对话框,在查找范围那里找到所需要的各种类型的文件,全部选中,之后点击窗口右下角的“插入”按钮;
就这样,多种类型的N个文件,就自动、批量插入到word里面洛;全部到合并到word以后,不同文件的内容,他们之间都有段落标记隔开,一眼就能看出来;首先选中的文件,就插入到最前面,依此类推;