.clu扫描文件转化word如何转化为.net扫描文件转化word

| HPP | | H |----> |彗星| - 。。'
" - > \ ____/ \ ____/---->----> \ ____/ \ ____/{ BR}
'| '---->---->---->---->---->---' |
'--- HPP
"CPP - > H
"HPP - > H
HPP - > CPP
;'H - > C
"H - > CPP
"对于任何给定的文件类型,有两个最多的外向转移。
"我们将尝试每个过渡,直到找到一个或没有可
; "注:我们尝试转换的顺序是很重要的,如果我们
"希望能够通过以下顺序循环:CPP - HPP - H - CPP ...
"四个支持的文件类型的第一个可能的过渡: &
如果EXT ="CPP"
toggledName =名称"。HPP"
elseif的EXT ="HPP"
toggledName名称="H"
elseif的EXT ="H"
toggledName =名称。"CPP"
;elseif的EXT ="C"
0;toggledName名称="H"
"不支持的文件类型
"尝试的第一个可能的过渡
对于每一个DTE.Solution.Projects
如果WalkProjectItemsAndOpen(proj.ProjectItems,toggledName)
"第二个可能的过渡有两个过渡文件类型
如果EXT ="CPP"&#
toggledName名称="H"
elseif的EXT ="HPP"
toggledName =名称。"CPP"&#16
elseif的EXT ="H"
toggledName =名称。"CPP"
"尝试第二个可能的过渡
对于每一个DTE.Solution.Projects
;如果WalkProjectItemsAndOpen(proj.ProjectItems,toggledName)
退出小组&#160
结束模块 评论会员:
时间:选项严格关闭Explicit选项关闭
进口EnvDTE 进口System.Diagnostics
公共模块OPAC
功能WalkProjectItemsAndOpen(ProjectItems,名称为String的ByRef的ByRef项目)为布尔 &#160
DIM项目的ProjectItem
0; DIM ITEM_NAME为String
如果ReferenceEquals(项目,为Nothing)
对于中的每个项目项目
昏暗的分项目为ProjectItems
分项目= item.ProjectItems
如果没有分项目是没有那么
如果WalkProjectItemsAndOpen(分项目,名称)
ITEM_NAME = item.FileNames(1)。tolower的
如果ITEM_NAME =名称,然后
"MSGBOX("发现"名称"项目"items.ContainingProject.UniqueName)
昏暗的OP作为ItemOperations
OP = DTE.ItemOperations
op.OpenFile(item.FileNames(0),Constants.vsViewKindTextView)
小组Swap_H_CPP()
作为项目的DIM PROJ
昏暗的文档作为文件
昏暗的名称为String
DOC = DTE.ActiveDocument
#160; 名称= doc.Path doc.Name
名称= name.ToLower
"首先尝试从"切换到"H"。CPP',那么反之亦然
如果name.EndsWith("H")
名称= name.Replace("。H","CPP")
elseif的name.EndsWith("。HPP")
名称= name.Replace("。HPP","CPP")
elseif的name.EndsWith("CPP")
60;名称= name.Replace("CPP","。H")
elseif的name.EndsWith("C")
名称= name.Replace("C","H")
elseif的name.EndsWith("H")
名称= name.Replace("。H","C")
elseif的name.EndsWith("。HPP")
60; 名称= name.Replace("HPP"。"C")
elseif的name.EndsWith("CPP")
名称= name.Replace("CPP","HPP")
elseif的name.EndsWith("C")
名称= name.Replace("C","HPP")
对于每一个DTE.Solution.Projects
如果WalkProjectItemsAndOpen(proj.ProjectItems名称)
结束模块 评论会员:
时间:谢谢你的更新。我切换到VS.NET 2005年,几乎完全使用C#现在,所以我不会尝试在未来几个月宏观打磨这个新版本;)评论会员:
时间:是啊,怎么你加载此在Visual Studio。NET。我知道如何在6.0,但不净。
。VB需要的地方?否则它是如何在IDE中加载?如何分配键盘捷径?怎么样?没有太多的细节。
工具 - 自定义 - 命令只显示宏评论会员:
时间:内,我在子文件夹我的消息来源。宏不起作用。它不检查子文件夹名。我已经添加了大胆的东西,下面要解决的问题
... 分项目= item.SubProject 如果没有分项目是没有那么
如果WalkProjectItemsAndOpen(分项目,名称)
最终如果最终如果
分项目= item.ProjectItems 如果sub_items.Count> 0,则
如果WalkProjectItemsAndOpen(分项目,名称)&#1
最终如果最终如果如果item.Name =名称,然后
"MSGBOX("发现"名称"项目"items.ContainingProject.UniqueName)... &#16
0;评论会员:
时间:令人惊讶的是,这样一个简单的宏可以使有用{S0} 只可惜,VS.NET宏运行这么多比VS6
评论会员:
时间:?很抱歉,如果这似乎是一个愚蠢的问题,但什么是正确的方法来安装这些宏我试图刚刚开放的宏IDE和简单的代码粘贴到样品项目,但是当我尝试分配一个键,它不会出现在ListBox。 评论会员:
时间:?很抱歉,如果这似乎是一个愚蠢的问题,但什么是正确的方法来安装这些宏我试图刚刚开放的宏IDE和简单的代码粘贴到样品项目,但是,然后,当我尝试分配一个键,它并没有出现在ListBox中。 评论会员:
时间:艾伦​​Balkany我不能够分配的键盘快捷键,因为宏没有出现在选项/环境/键盘的Page。我可以看到在ListBox中唯一Macros.Samples .*项目。任何人都可以帮助吗? "评论会员:
时间:自定义 - >命令 - >宏
帕维尔索科洛夫
- 修改于十月十六日,星期天2005年 20时46分评论会员:
时间:我怎样才能创建一个工具栏按钮,将启动宏 评论会员:
时间:!你所有的问题,安装的宏
确保模块的名称是一样的,在上述OPAC宏指定。如果你创建一个新的宏,它是命名为Module1,只是它重新命名为OPAC。也不要忘记编译该项目,其中U创建的模块。 评论会员:
时间:Nevering:作者应该有提到如何安装它,它的不值钱,如果你不能使用它在VisualStudio2005,我选择:"工具"|"宏"|新建宏项目。然后我粘贴的代码,并删除重复的import语句,和移动选项语句的开头。我把它命名为"开关"。然后我选择:工具|自定义,选择"宏"类别然后,我强调的"开关"宏,并单击"键盘......"按钮。我进入的"开关","显示包含命令:"框。接着我强调在列表中的切换宏,CTRL-Q(单键中风)进入的"按下快捷键"框,并点击"分配"按钮。sakamaki评论会员:
时间:这里的一个文件有简单的修复一个。CPP,CPP,H,或任何其他风格的混合皮埃尔的代码将不会工作的蝙蝠。简单地改变这两条线:在Swap_H_CPP()改变名称=doc.Name名称=doc.Name.ToLower和功能WalkProjectItemsAndOpen()的变化也如果item.Name=名称,然后如果item.Name.ToLower=名称,然后现在,应该在更多的情况下工作。 hector031评论会员:
时间:这个宏不再在VS工程。NET2003这很容易修复,但-取代这一行:分项目=item.SubProject这其中:分项目=item.ProjectItems应该正常工作。
&桌面&网页开发&移动开发&数据库&多媒体&编程语言&平台,框架和库&编程通用&图形/设计&开发周期&一般阅读&第三方产品&作者资源&其他
快速解答标签
价值作最多选择文件夹
MFC提供打开文件对话框可以选择文件名,如果想选择目录的话,就不能使用CFileDialog,实现过程如下:
&&&&&&&& CStringsFolderP
&&&BROWSEINFO
&&&TCHAR Buffer[MAX_PATH];
&&&//初始化入口参数bi开始
&&&bi.hwndOwner = NULL;
&&&bi.pidlRoot =NULL;//初始化制定的root目录很不容易,
&&&bi.pszDisplayName = B//此参数如为NULL则不能显示对话框
&&&bi.lpszTitle =
&&&//bi.ulFlags = BIF_BROWSEINCLUDEFILES;//包括文件
&&&bi.ulFlags = BIF_EDITBOX;//包括文件
&&&bi.lpfn = NULL;
&&&bi.iImage=IDR_MAINFRAME;
&&&//初始化入口参数bi结束
&&&LPITEMIDLIST pIDList = SHBrowseForFolder(&bi);//调用显示选择对话框
&&&if(pIDList)
&&&&&&&SHGetPathFromIDList(pIDList, Buffer);
&&&&&&&//取得文件夹路径到Buffer里
&&&&&&&sFolderPath = B//将路径保存在一个CString对象里
选择文件名
CFileDialog文件选择对话框的使用:首先构造一个对象并提供相应的参数,构造函数原型如下:
CFileDialog::CFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL,DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter =NULL, CWnd* pParentWnd = NULL );
参数意义如下:
bOpenFileDialog 为TRUE则显示打开对话框,为FALSE则显示保存对话文件对话框。
lpszDefExt 指定默认的文件扩展名。
lpszFileName 指定默认的文件名。
dwFlags 指明一些特定风格。
OFN_HIDEREADONLY:隐藏只读选项
&&& OFN_OVERWRITEPROMPT:覆盖已有文件前提
&&& OFN_ALLOWMULTISELECT:允许选择多个文件
&&& OFN_CREATEPROMPT:如果输入的文件名不存在,则对话框返回询问用户是否根据次文件名创建文件的消息框
&&& OFN_FILEMUSTEXIST:只能输入已存在的文件名
&&& OFN_FORCESHOWHIDDEN:可以显示隐藏的文件
&&& OFN_NOREADONLYRETURN:不返回只读文件
&& & OFN_OVERWRITEPROMPT:保存的文件已存在时,显示文件已存在的信息
lpszFilter 是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。参数格式如:
&ChartFiles (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.*.xls)|*.*.xls|All Files (*.*)|*.*||&;文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。
pParentWnd 为父窗口指针。
对话框选项常用属性(实例:dialog)
dialog.m_ofn.lpstrTitle:显示窗口标题。
dialog.m_ofn.lpstrInitialDir:初始化展开路径。
dlg.m_ofn.lpstrFile:默认文件
dlg.m_ofn.lpstrFilter:文件筛选类型,注意与lpszFilter区别,要用&\0&,不能用&|&
如:dlg.m_ofn.lpstrFilter=&所有文件\0*.*\0图像文件\0*.*.*.gif\0\0&;
创建文件对话框可以使用DoModal(),在返回后可以利用下面的函数得到用户选择:
CStringCFileDialog::GetPathName( ) 得到完整的文件名,包括目录名和扩展名如:c:testtest1.txt
CStringCFileDialog::GetFileName( ) 得到完整的文件名,包括扩展名如:test1.txt
CStringCFileDialog::GetExtName( ) 得到完整的文件扩展名,如:txt
CStringCFileDialog::GetFileTitle ( ) 得到完整的文件名,不包括目录名和扩展名如:test1
POSITIONCFileDialog::GetStartPosition( ) 对于选择了多个文件的情况得到第一个文件位置。
CString CFileDialog::GetNextPathName(POSITION& pos ) 对于选择了多个文件的情况得到下一个文件位置,并同时返回当前文件名。但必须已经调用过POSITION CFileDialog::GetStartPosition( )来得到最初的POSITION变量。
CFileDialogGetFile(TRUE,NULL,NULL,OFN_FILEMUSTEXIST,&Microsoft Excel(*.xls)|*.xls|AllFiles(*.*)|*.*&);
CFileDialogGetFile(打开文件对话框(TRUE),扩展名(NULL),文件名(NULL),风格-文件必须存在(OFN_FILEMUSTEXIST),查看文件类型-EXCEL文件,所有文件(Microsoft Excel(*.xls)|*.xls|All Files(*.*)|*.*);
选择多个文件示例:
CFileDialogopenDlg( TRUE, /*bOpenFileDialog=TRUE时打开文件,为FALSE时保存文件*/&
&&&&&&&&&& NULL,&
&&&&&&&& &&NULL,&
&&&&&&&&&& OFN_ALLOWMULTISELECT,&& /*dwFlags为OFN_ALLOWMULTISELECT表示可以选择多个文件*/);&
//构建CFielDialog对象时指定了OFN_ALLOWMULTISELECT的情况下,需要在对象DoModal()函数返回之前需要指定足够大&
//的内存空间来存放文件名.如果选择的多个文件名组成的字符串长度大于指定的内存空间是就会导致DoModal()返回IDCANCEL.&
/*申请内存来存放多个文件名组成的字符串*/&
const intnMaxFiles = 1000;&
const intnMaxPathBuffer = (nMaxFiles * (MAX_PATH + 1)) + 1;&
LPWSTR pc =(LPWSTR)malloc(nMaxPathBuffer * sizeof(WCHAR));&
& openDlg.GetOFN().lpstrFile =&&&&&&&&&&&&&&&&&&&&&&&&&&&
& openDlg.GetOFN().lpstrFile[0] = NULL;&
& openDlg.nMaxFile = nMaxPathB&
& if( openDlg.DoModal() == IDOK )&
&&&& POSITION posStart =openDlg.GetStartPosition();&
&&&& while( posStart )&
&&&&&&& //从pc所指向的内存中解析出每个文件的名字,这里的fileName所占的内存不能和pc所占的内存发生冲突&
&&&&&&&& CString fileName =openDlg.GetNextPathName();&&&
// pathName= fileDlg.GetNextPathName(pos_file);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& free(pc);&
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:195973次
积分:3194
积分:3194
排名:第3733名
原创:105篇
译文:21篇
评论:39条
(5)(11)(7)(2)(3)(6)(22)(8)(2)(26)(6)(29)Posts - 86,
Articles - 0,
Comments - 45
21:12 by GavinJun, ... 阅读,
注:C#的文件操作都是包含在System.Io的命名空间里面。
一、&Path类:对一个路径做相应操作,包括文件路径,目录路径。通常会用到Path这个类。1.更改路径字符串的扩展名Public& static& string& ChangeExtension(string& path,string& extension)参数:path(String):要修改的路径信息.extension(String):新的扩展名。返回值:String,修改后的路径字符串。注意细节:a、如果 extension 是 null,则返回的字符串包含指定的路径,其扩展名已移除(点还在)。string s =Path.ChangeExtension(@"c:\path.dll", "");//返回:"c:\path."b、如果 path 是 null 或空字符串 (""),则返回的路径信息是未修改的。string s2 = Path.ChangeExtension("", ".txt");//返回:""C、如果 path 不具有扩展名,并且 extension 不是 null,则返回的路径字符串包含 extension,它追加到 path 的结尾。string s3 = Path.ChangeExtension(@"c:\目录", ".txt");//返回:"c:\目录.txt"。 如果这里的extension不含句点,会自动添加,返回的还是"c:\目录.txt"2、合并两个字符路径字符串public static string Combine(string path1,string path2)&&& 参数:path1(String) ,第一个路径path2(String), 第二个路径返回值:String ,合并后的路径字符串。常见的合并操作为:string path1 = @"c:\目录";string path2 = @"install.txt";string s4 = bine(path1, path2);//返回:"c:\目录\install.txt"&& 3.获取指定路径字符串的目录信息&& public static string GetDirectoryName(string path)&& 直接看几个示例了:string fileName = @"C:\mydir\myfile.ext";string path = @"C:\mydir\";string rootPath = @"C:\";
Path.GetDirectoryName(fileName);//返回:'C:\mydir'Path.GetDirectoryName(path);//返回:'C:\mydir'Path.GetDirectoryName(rootPath);//返回:&&4.获取指定路径字符串的扩展名public static string GetExtension(string path)string fileName = @"C:\mydir.old\myfile.ext";string path = @"C:\mydir.old\";Path.GetExtension(fileName);//返回 : '.ext'Path.GetExtension(path);//返回 :' '
二、File类和FileInfo类File类和FileInfo类的区别和使用方法.,两者的主要区别是File不能实例化,只提供静态方法,而后者可以实例化,提供的方法和File类相似. C#语言中通过File和FileInfo类来创建、复制、删除、移动和打开文件。在File类中提供了一些静态方法,使用这些方法可以完成以上功能,但File类不能建立对象。FileInfo类使用方法和File类基本相同,但FileInfo类能建立对象。在使用这两个类时需要引用System.IO命名空间。这里重点介绍File类的使用方法。1、简单介绍些方法AppendText:返回StreamWrite,向指定文件添加数据;如文件不存在,就创建该文件。&Copy:复制指定文件到新文件夹。Create:按指定路径建立新文件Delete:删除指定文件。Exists:检查指定路径的文件是否存在,存在,返回true。GetAttributes:获取指定文件的属性。GetCreationTime:返回指定文件或文件夹的创建日期和时间。GetLastAccessTime:返回上次访问指定文件或文件夹的创建日期和时间。GetLastWriteTime:返回上次写入指定文件或文件夹的创建日期和时间。Move:移动指定文件到新文件夹。Open:返回指定文件相关的FileStream,并提供指定的读/写许可。OpenRead:返回指定文件相关的只读FileStream。OpenWrite:返回指定文件相关的读/写FileStream。SetAttributes:设置指定文件的属性。SetCretionTime:设置指定文件的创建日期和时间。SetLastAccessTime:设置上次访问指定文件的日期和时间。SetLastWriteTime:设置上次写入指定文件的日期和时间。
2、下面通过程序实例来介绍其主要方法:(1)文件打开方法:File.Open该方法的声明如下:public static FileStream Open(string path, FileMode mode)。下面的代码打开存放在c:\Example目录下名称为e1.txt文件,并在该文件中写入hello。FileStream& TextFile=File.Open(@"c:\ Example\e1.txt",FileMode.Append);byte []& Info={(byte)'h',(byte)'e',(byte)'l',(byte)'l',(byte)'o'};TextFile.Write(Info,0,Info.Length);TextFile.Close();(2)文件创建方法:File.Create该方法的声明如下:public& static& FileStream& Create(string path)。下面的代码演示如何在c:\Example下创建名为e1.txt的文件。FileStream& NewText = File.Create(@"c:\Example\e1.txt");NewText.Close();(3)文件删除方法:File.Delete该方法声明如下:public static void Delete(string path)。下面的代码演示如何删除c:\Example目录下的e1.txt文件。File.Delete(@"c:\Example\e1.txt");(4)文件复制方法:File.Copy该方法声明如下:public static void Copy(string& sourceFileName,string& destFileName,bool& overwrite);下面的代码将c:\Example\e1.txt复制到c:\Example\e2.txt。由于Cope方法的OverWrite参数设为true,所以如果e2.txt文件已存在的话,将会被复制过去的文件所覆盖。File.Copy(@"c:\Example\e1.txt",@"c:\Example\e2.txt",true);(5)文件移动方法:File.Move该方法声明如下:public& static& void& Move(string& sourceFileName,string destFileName);下面的代码可以将c:\Example下的e1.txt文件移动到c盘根目录下。注意:只能在同一个逻辑盘下进行文件转移。如果试图将c盘下的文件转移到d盘,将发生错误。File.Move(@"c:\Example\BackUp.txt",@"c:\BackUp.txt");(6)判断文件是否存在的方法:File.Exist该方法声明如下:public static bool Exists(string path);下面的代码判断是否存在c:\Example\e1.txt文件。if(File.Exists(@"c:\Example\e1.txt"))//判断文件是否存在(7)得到文件的属性用下面的代码可以得到文件的属性,例如文件创建时间、最近访问时间、最近修改时间等等。FileInfo fileInfo=new FileInfo(&file1.txt&);string s=fileInfo.FullName+&文件长度=&+fileInfo.Length+&,建立时间=&+ fileInfo.CreationTime+&;也可用如下代码:string s=&建立时间=&+File.File.GetCreationTime(&file1.txt&)+&最后修改时间=&+ File.GetLastWriteTime(&file1.txt&)+&访问时间=&+File.GetLastAccessTime(&file1.txt&);
三、Directory类和DirectoryInfo类Directory类来创建、复制、删除、移动文件夹。在Directory类中提供了一些静态方法,使用这些方法可以完成以上功能。但Directory类不能建立对象。DirectoryInfo类使用方法和Directory类基本相同,但DirectoryInfo类能建立对象。在使用这两个类时需要引用System.IO命名空间。这里重点介绍Directory类的使用方法。Directory类常用的方法如下:CreateDirectory:按指定路径创建所有文件夹和子文件夹。Delete:删除指定文件夹。Exists:检查指定路径的文件夹是否存在,存在,返回true。GetCreationTime:返回指定文件或文件夹的创建日期和时间。GetCurrentDirectory:获取应用程序的当前工作文件夹。GetDirectories:获取指定文件夹中子文件夹的名称。GetDirectoryRoot:返回指定路径的卷信息、根信息或两者同时返回。GetFiles:返回指定文件夹中子文件的名称。GetFileSystemEntries:返回指定文件夹中所有文件和子文件的名称。GetLastAccessTime:返回上次访问指定文件或文件夹的创建日期和时间。GetLastWriteTime:返回上次写入指定文件或文件夹的创建日期和时间。GetLogicalDrives:检索计算机中的所有驱动器,例如A:、C:等等。GetParent:获取指定路径的父文件夹,包括绝对路径和相对路径。Move:将指定文件或文件夹及其内容移动到新位置。SetCreationTime:设置指定文件或文件夹的创建日期和时间。SetCurrentDirectory:将应用程序的当前工作文件夹设置指定文件夹。SetLastAccessTime:设置上次访问指定文件或文件夹的日期和时间。SetLastWriteTime:设置上次写入指定文件夹的日期和时间。
3、下面通过程序实例来介绍其主要方法:(1)目录创建方法:Directory.CreateDirectory方法声明如下:public& static& DirectoryInfo& CreateDirectory(string path);下面的代码演示在c:\Dir1文件夹下创建名为Dir2子文件夹。Directory.CreateDirectory(@"c:\Dir1\Dir2");(2)目录属性设置方法:DirectoryInfo.Atttributes下面的代码设置c:\Dir1\Dir2目录为只读、隐藏。与文件属性相同,目录属性也是使用FileAttributes来进行设置的。DirectoryInfo& DirInfo=new& DirectoryInfo(@"c:\Dir1\Dir2");DirInfo.Atttributes=FileAttributes.ReadOnlyFileAttributes.H(3)目录删除方法:Directory.Delete该方法声明如下:public& static& void Delete(string& path,bool& recursive);下面的代码可以将c:\Dir1\Dir2目录删除。Delete方法的第二个参数为bool类型,它可以决定是否删除非空目录。如果该参数值为true,将删除整个目录,即使该目录下有文件或子目录;若为false,则仅当目录为空时才可删除。Directory.Delete(@"c:\Dir1\Dir2",true);(4)目录移动方法:Directory.Move该方法声明如下:public& static& void& Move(string sourceDirName,string destDirName);下面的代码将目录c:\Dir1\Dir2移动到c:\Dir3\Dir4。File.Move(@"c:\Dir1\Dir2",@"c:\Dir3\Dir4");}(5)获取当前目录下所有子目录:Directory.GetDirectories该方法声明如下:public& static& string[] GetDirectories();下面的代码读出c:\Dir1\目录下的所有子目录,并将其存储到字符串数组中。string [] D&& Directorys = Directory. GetDirectories (@"c:\Dir1");获得所有逻辑盘符:string[] AllDrivers=Directory.GetLogicalDrives();(5)判断目录是否存在方法:Directory.Exist该方法声明如下:public static bool Exists();下面的代码判断是否存在c:\Dir1\Dir2目录。if(File.Exists(@"c:\Dir1\Dir2"))//判断目录是否存在
四、文件监视类:FileSystemWatcher 侦听文件系统更改通知,并在目录或目录中的文件发生更改时引发事件。可借助FileSystemWatcher会更简单些。1、属性:(1)Path--这个属性告诉FileSystemWatcher它需要监控哪条路径。例如,如果我们将这个属性设为&C:\test&,对象就监控test目录下所有文件发生的所有改变(包括删除,修改,创建,重命名)。(2)IncludeSubDirectories--这个属性说明FileSystemWatcher对象是否应该监控子目录中(所有文件)发生的改变。(3)Filter--这个属性允许你过滤掉某些类型的文件发生的变化。例如,如果我们只希望在TXT文件被修改/新建/删除时提交通知,可以将这个属性设为&*txt&。在处理高流量或大型目录时,使用这个属性非常方便。(4)NotifyFilter--获取或设置要监视的更改类型。可以进一步的过滤要监控的更改类型:如watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite| NotifyFilters.FileName | NotifyFilters.DirectoryN2、事件:(1)Changed--当被监控的目录中有一个文件被修改时,就提交这个事件。值得注意的是,这个事件可能会被提交多次,即使文件的内容仅仅发生一项改变。这是由于在保存文件时,文件的其它属性也发生了改变。(2)Created--当被监控的目录新建一个文件时,就提交这个事件。如果你计划用这个事件移动新建的事件,你必须在事件处理器中写入一些错误处理代码,它能处理当前文件被其它进程使用的情况。之所以要这样做,是因为Created事件可能在建立文件的进程释放文件之前就被提交。如果你没有准备正确处理这种情况的代码,就可能出现异常。(3)Deleted--当被监控的目录中有一个文件被删除,就提交这个事件。(4)Renamed--当被监控的目录中有一个文件被重命名,就提交这个事件。 注:如果你没有将EnableRaisingEvents设为真,系统不会提交任何一个事件。如果有时FileSystemWatcher对象似乎无法工作,请首先检查EnableRaisingEvents,确保它被设为真。3、事件处理当FileSystemWatcher调用一个事件处理器时,它包含两个自变量--一个叫做&sender&的对象和一个叫做&e&的 FileSystemEventArgs对象。我们感兴趣的自变量为FileSystemEventArgs自变量。这个对象中包含有提交事件的原因。以下是FileSystemEventArgs对象的一些属性:属性:(1)Name--这个属性中使事件被提交的文件的名称。其中并不包含文件的路径--只包含使用事件被提交的文件或目录名称。(2)ChangeType--这是一个WatcherChangeTypes,它指出要提交哪个类型的事件。其有效值包括:Changed,Created,Deleted,Renamed(3)FullPath--这个属性中包含使事件被提交的文件的完整路径,包括文件名和目录名。注意:FileSystemEventArgs对象是监控文件夹下有文件创建、删除、修改时的自变量,如果是重命名的话为RenamedEventArgs对象此时除了FileSystemEventArgs对象的属性值,多了一个OldFullPath,为重命名之前的文件名。
五、文件的读取和写入文件1、流的概念:在.net FrameWork中进行的所有的输入输出工作都需要使用流.流是串行化设备的抽象表示.串行化设备可以以线性方式存储数据,并可以以同样的方式访问:一次访问一个字节.此设备可以是磁盘文件,打印机,内存位置或任何其他支持以线性方式读写的对象.通过使用设备抽象,就可以隐藏流的基础性的目标或源.这种抽象的级别使得代码可以重用,允许我们编写更通用的程序.因此,当程序从文件输入流或网络输入流读取数据时,就可以转换并重用类似的代码.而且,通过使用流,我们还可以忽略每一种设备的物理机制.因此为了从文件流中读取文件,我们无须担心磁盘开销或内存分配等问题C# 中Stream类是所有流的抽象基类,它可以为流提供一般性视图,从而使得开发人员不需要了解I/O设备的具体细节。与流相关的操作包括以下3个基本操作。读取流:即读取流中的内容。写入流:即将指定的内容写入到流中。流支持查找:即可以查找或设置流的当前位置。与流相关的、最为常用的类包括Stream类、FileStream类(文件流,常用于操作文件)、MemoryStream类(内存流,常用来操作内存中的数据)和BufferedStream类(缓存流,用来操作缓存中的数据)。其中Stream类为抽象类,FileStream类、MemoryStream类和BufferedStream类从直接继承于Stream类,它们是实体类。2、&使用FileStream类管理文件数据先看几个例子:(1)&使用FileStream流写入文本文件:static void Main(string[] args){&&&&& string str = "hello world";&&&&&& string strPath = @"D:\test.txt";&&&&&& FileInfo fileStr = new FileInfo(strPath);&&&&&& byte[] strWrite = new UTF8Encoding(true).GetBytes(str); &&&&& &FileStream StrStream=fileStr.Create();&&&& & StrStream.Write(strWrite, 0, strWrite.Length);&&&&& Console.WriteLine("写入成功!");&&&&& StrStream.Close();}(2)使用MemoryStream类管理内存数据&&& static void Main(string[] args)&&& {&&&&& string str = "你好!"&&&&& byte[] MermoryWrite = new UTF8Encoding(true).GetBytes(str);&&&&& //在内存中申请适合的空间&&&&& MemoryStream ms = new MemoryStream(MermoryWrite.Length);&&&&& //写入内存缓冲区&&&&& ms.Write(MermoryWrite, 0, MermoryWrite.Length);&&&&& //打印出当前流的位置&&&&& Console.WriteLine(ms.Position);&&&&& //清空缓冲区&&&&& ms.Flush();&&&&& //seek属于定位指针函数,第一个参数它是相对于第二个参数的位置,也相当于偏移量。第二个参数是它用作查找参考点。&&&&& //返回值:流内的新位置,通过将初始参考点和偏移量合并计算而得。&&&&& ms.Seek(0, SeekOrigin.Begin);&&&&& byte[] temp = new byte[MermoryWrite.Length];&&&&& // 从当前流中读取字节块并将数据写入 buffer 中。返回写入缓冲区中的总字节数。&&&&& ms.Read(temp, 0, (int)ms.Length);&&&&& Console.WriteLine(new UTF8Encoding(true).GetChars(temp));&&&&&&& }&&&&&& }(2)&使用BufferedStream来提高流的性能&static void Main(string[] args)&&&&&&& {&&&&&&&&&&& string str = "你好!";&&&&&&&&&&& string strPath = @"D:\test.txt";&&&&&&&&&&& FileInfo fileStr = new FileInfo(strPath);&&&&&&&&&&& byte[] strWrite = new UTF8Encoding(true).GetBytes(str);&&&&&&&&&&& FileStream StrStream = fileStr.Create();
&&&&&&&&&&& //实例化缓冲区&&&&&&&&&&& BufferedStream bufferStr = new BufferedStream(StrStream);&&&&&&&&&&& //向缓冲区中写入流&&&&&&&&&&& bufferStr.Write(strWrite, 0, strWrite.Length);&&&&&&&&&&& bufferStr.Close();&&&&&&&&&&& StrStream.Close();&&&&&&&&&&& Console.WriteLine("写入成功!");&&&& &&&&&&& }3、&管理应用程序数据(1)&管理文本数据用StreamReader和StreamWriter,它们继承与抽象类TextReader类和TextWriter类,这点注意不要用错了。如:读取D:\test.txt文件static void Main(string[] args)&&&&&&& {&&&&&&&&&&& string strPath = @"D:\test.txt";&&&&&&&&&& &&&&&&&&&&& //写入文件&&&&&&&&&&& StreamWriter sw=new StreamWriter(File.Open(strPath,FileMode.Append));&&&&&&&&&&& sw.WriteLine(DateTime.Now.ToString());&&&&&&&&&&& //注意清空缓冲区和关闭流对象&&&&&&&&&&& sw.Flush();&&&&&&&&&&& sw.Close();
&&&&&&&&&&& //从文件中读取数据&&&&&&&&&&& StreamReader sr=new StreamReader(File.Open(strPath,FileMode.Open));&&&&&&&&&&& Console.WriteLine(sr.ReadToEnd());&}(2)&管理字符串数据用StringReader类和StringWriter类,注意用到StringBuilder&&&&&&& static void Main(string[] args)&&&&&&& {&&&&&&&&&& &&&&&&&&&&& //写入字符串&&&&&&&&&&& StringBuilder sb = new StringBuilder();&&&&&&&&&&& StringWriter sw = new StringWriter(sb);&&&&&& &&&&&&&&&&& sw.WriteLine(DateTime.Now.ToString());
&&&&&&&&&&& //注意清空缓冲区和关闭流对象&&&&&&&&&&& sw.Flush();&&&&&&&&&&& sw.Close();
&&&&&&&&&&& //从文件中读取数据&&&&&&&&&&& StringReader sr = new StringReader(sb.ToString());&&&&&&&&&&& Console.WriteLine(sr.ReadToEnd());
}(3)&管理二进制文件用BinaryReader类和BinaryWriter类,注意需要一个stream对象&&&&&&& static void Main(string[] args)&&&&&&& {&&&&&&&&&&& string strPath = @"D:\test.dat";&&&&&&&&&& &&&&&&&&&&& //写入二进制文件&&&&&&&&& & BinaryWriter bw=new BinaryWriter(File.Open(strPath,FileMode.OpenOrCreate));&&&&&&&&&&& bw.Write(true);;&&&&&&&&&&& bw.Write('A');&&&&&&&&&&& //注意清空缓冲区和关闭流对象&&&&&&&&&&& bw.Flush();&&&&&&&&&&& bw.Close();&&&&&&&&&&& //从文件中读取数据&&&&&&&&&&& BinaryReader br = new BinaryReader(File.Open(strPath, FileMode.Open));&&&&&&&&&&& Console.WriteLine(br.ReadBoolean());&&&&&&&&&&& &&&&&&&&&&& Console.WriteLine(br.ReadChar());&&&&&&&&&&& }
注:以上这些类都是继承于Stream类的(4).NET Framework的字符编码类:在这里不再赘述,可以查msdn(&&)
(5)扩展下,高效处理字符串看一下如下代码:&&& string str="";&&& for (int i = 0; i & 1000; i++)&&&& {&&&&&& str += i.ToString();&&&&& & }字符串是引用类型,这样将会有999个空间是浪费的,所以为了提高效率引用StringBuilder,而不仅仅是合并。以上代码可以改为:&&& StringBuilder str = new StringBuilder();&&& for (int i = 0; i & 1000; i++)&&&& {&&&&&&& str.Append(i.ToString());&&&&& & }这样效率就会大大提高。
简单先写这么多吧,权当复习下。

我要回帖

更多关于 pdf文件转化为word 的文章

 

随机推荐