华为这要怎么办啊,等了半天!急急急招销售

7749人阅读
C#文件操作(1)
本文章主要是讲述C#中文件操作的基础知识,如何创建文件夹、创建文件、介绍Directory类\DirectoryInfo类和使用FolderBrowserDialog组件(文件夹对话框)。文章属于基础知识,参考了书籍刘丽霞《C#范例开发大全》,希望对大家有用!
一.界面设计
创建的C# Windows窗体应用程序,界面设计如下添加Lable控件、TextBox控件(其中textBox1可设置属性为只读)、Button控件和FolderBrowserDialog组件(文件夹对话框),点击&浏览按钮&时会弹出&浏览文件夹&的对话框供选择要创建文件夹的路径。同时输入创建个数点击&创建文件夹&按钮可以实现批量创建文件夹功能。
<span style="color:#.添加命名空间
在文件操作中,Directory类和DirectoryInfo类的命名空间都是system.IO:
using System.IO;
<span style="color:#.源代码
点击&浏览&按钮和“创建文件夹”按钮分别实现相应的Click事件,同时添加一个变量string path\filename记录创建文件夹的路径和文件夹名,代码如下:
//定义变量
string path = &&;
//文件路径
string filename = &&;
//文件夹名
//点击&浏览&按钮
private void button3_Click(object sender, EventArgs e)
//使用文件对话框查找文件夹创建的路径
if(folderBrowserDialog1.ShowDialog() == DialogResult.OK)
path = this.folderBrowserDialog1.SelectedP
//获取用户选中路径
textBox1.Text =
//显示路径
//点击&创建文件夹&按钮
private void button1_Click(object sender, EventArgs e)
if (textBox2.Text == &&)
//创建个数不为0
MessageBox.Show(&请输入创建文件夹的个数!&);
//Convert将一个基本数据类型转换为另一个数据类型
int num = Convert.ToInt32(textBox2.Text);
//创建文件夹个数
//循环创建文件夹
for (int i = 0; i & i&#43;&#43;)
filename = path &#43; &\\新建文件夹& &#43; i.ToString();
//组合路径
Directory.CreateDirectory(filename);
//创建文件夹
MessageBox.Show(&文件夹创建成功!&);
<span style="color:#.运行结果
选择路径后,点击&创建&按钮就会在相应目录下创建文件夹,如果想创建txt文件可以用File.Create(string path)创建;建议在程序中尽量使用try..catch进行异常信息处理。上面核心知识有两点:(后面将详细介绍)
&&&&&&&&&&&&&&&&&&&& &(1).使用FolderBrowserDialog组件获取创建文件夹路径;
&&&&&&&&&&&&&&&&&&&&& (2).使用Directory类提供的静态方法CreateDirectory()实现创建文件夹.
三.FolderBrowserDialog组件
在winform程序中我们经常需要使用FolderBrowserDialog组件打开相应路径,该控件的运行结果如下图所示:
它的实现代码基本如下:
//FolderBrowserDialog:文件对话框获取文件夹创建的路径
//方法一:调用folderBrowserDialog1
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
//DialogResult获取对话框结果&确定&
path = this.folderBrowserDialog1.SelectedP
//获取用户选中路径
textBox1.Text =
//显示路径
//方法二:动态实例FolderBrowserDialog控件
FolderBrowserDialog folder = new FolderBrowserDialog();
if (folder.ShowDialog() == DialogResult.OK)
path = folder.SelectedP
//获取用户选中路径
textBox1.Text =
//显示路径
它提供一种方法提示用户浏览、创建并最终选择一个文件夹,但不可以选择文件;通过浏览树型结构呈现。其中我们使用的SelectedPath属性是获取或设置用户选定的路径(详解MSDN)。同时与它类&#20284;的控件还有保存文件位置对话框saveFileDialog控件和打开对话框OpenFileDialog控件:
SaveFileDialog folder = new SaveFileDialog();
folder.Filter = &网页文件(*.htm)|*.htm|ASP.NET文件(*.aspx)|*.aspx&;
//打开保存对话框 点击&确定&按钮执行
if (folder.ShowDialog() == DialogResult.OK)
//读取数据、写入数据操作 如:
stream.ReadToEnd();
stream.Write();
stream.Close();
四.Directory类和DirectoryInfo类
Directory类用于创建、移动和枚举目录和子目录的实例方法。无法继承此类,其命名空间为System.IO;上面代码中主要采用Directory提供的静态方法CreateDirectory()创建文件夹;而Directoryinfo类是实例类,这两个类包含的大部分方法都是相同的,典型操作有创建、复制、移动、重命名和删除。如果打算多次重用某个对象应考虑使用DirectoryInfo实例方法,而不是Directory静态方法,因为并不总需要安全检查。下面介绍一些简单的方法:
//Directory
Directory.Exists(&e:\\file&);
//检查文件是否存在
Directory.CreateDirectory(&e:\\file&);
//创建文件夹
Directory.Delete(&e:\\file&);
//删除文件夹
Directory.GetCreationTime(&e:\\nba&);
//获取目录的创建时间和日期(dateTime型-&ToString)
Directory.GetCurrentDirectory();
//获取应用程序当前目录(返回&#20540;string)
Directory.GetFiles(&e:\\&);
//获取目录中文件名称
string[] files = Directory.GetFiles(&e:\\&);
Directory.GetDirectoryRoot(&e:\\file&);
//获取路径根目录
Directory.Move(&E:\\&,&F:\\&);
//移动文件夹(E移动到F)
Directory.SetCreationTime(string,DateTime);
//设置文件目录创建时间日期
//DirectoryInfo
DirectoryInfo dir = new DirectoryInfo(path);
//实例对象
dir.GetFileSystemInfos();
//获取目录中所有文件盒子目录
dir.GetFiles();
//返回当前目录文件列表
dir.MoveTo(string);
//移动文件或重命名
文章主要介绍基于Directory类和DirectoryInfo类的文件夹、文件操作的基础知识,其中通过例子介绍了FolderBrowserDialog组件等知识,文章最后感谢MSDN中的一些知识和《C#范例开发大全》书籍及作者。同时写该文章主要原是对自己学习该知识的一个总结与记录,可能内容很简单也不是很实用,但还是希望文章对大家有所帮助。如果有错误或不足之处,见谅!
(By:Eastmount
下午4点 )
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1453569次
积分:16564
积分:16564
排名:第587名
原创:251篇
转载:10篇
评论:1219条
作者:杨秀璋
学历:本科-北京理工大学
&&&&&&&&&&&硕士-北京理工大学
现任教于贵财财经大学信息学院
简介:自幼受贵州大山的熏陶,养成了诚实质朴的性格。经过寒窗苦读,考入BIT,为完成自己的教师梦,放弃IT、航天等工作,成为贵财一名大学教师,并想把自己所学所感真心传授给自己的学生,帮助更多陌生人。
贵州纵美路迢迢,
为负劳心此一遭。
收得破书三四本,
也堪将去教尔曹。
娜美人生,醉美生活。
他和她经历风雨,慢慢变老。
文章:13篇
阅读:61600
文章:12篇
阅读:46779
文章:36篇
阅读:266692
文章:29篇
阅读:246830
文章:18篇
阅读:131406
文章:12篇
阅读:58740
文章:19篇
阅读:139448
文章:16篇
阅读:73431
文章:20篇
阅读:108527
文章:13篇
阅读:80624
(2)(3)(2)(4)(11)(2)(1)(2)(10)(9)(5)(3)(3)(2)(3)(4)(2)(3)(5)(5)(6)(11)(20)(6)(3)(5)(13)(5)(7)(7)(5)(7)(8)(9)(3)(2)(1)(1)(6)(3)(6)(5)(7)(1)(1)(1)(10)(4)(6)(3)(4)(2)(2)
【算法知识】
【C# .NET】
【游戏开发】
【Android】
【正能量&导师】
【图形&视频处理】
【各种知识】
【数据挖掘】
【.NET MF&嵌入式】
【架构&模式】
【操作系统】
【IOS开发】
【CSDN扫地僧】C#操作目录与文件的方法步骤
字体:[ ] 类型:转载 时间:
本篇文章是对C#操作目录与文件的方法步骤进行了详细的分析介绍,需要的朋友参考下
&#8226; 创建目录和文件1、通过Path类的Combine方法可以合并路径。 代码如下:string activeDir = @"C:\myDir";string newPath = System.bine(activeDir, "mySubDirOne");2、目录的创建。创建目录时如果目录已存在,则不会重新创建目录,且不会报错。创建目录时会自动创建路径中各级不存在的目录。(1)通过Directory类的CreateDirectory方法创建。 代码如下:string activeDir = @"C:\myDir";string newPath = System.bine(activeDir, "mySubDirOne");System.IO.Directory.CreateDirectory(newPath);(2)通过DirectoryInfo的对象创建。 代码如下:System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(@"C:\myDirTwo\mySubDirThree");di.Create();3、文件的创建。通过Create方法创建文件,会覆盖同名的现有文件。创建文件时,该文件所在路径的目录必须存在,否则报错。(1)通过File类的Create方法创建。 代码如下:string activeDir = @"C:\myDir";&&&&&&&&&&& string newPath = System.bine(activeDir, "mySubDirOne");&&&&&&&&&&& System.IO.Directory.CreateDirectory(newPath);&&&&&&&&&&& //创建一个空白文件&&&&&&&&&&& string fileNameOne = DateTime.Now.ToString("yyyyMMddHHmmssffff")&&&&&&&&&&&&&&& + ".txt";&&&&&&&&&&& string filePathOne = System.bine(newPath, fileNameOne);&&&&&&&&&&& System.IO.File.Create(filePathOne);(2)通过FileInfo对象创建。 代码如下://通过Combine合并目录&&&&&&&&&&& //然后创建目录&&&&&&&&&&& string activeDir = @"C:\myDir";&&&&&&&&&&& string newPath = System.bine(activeDir, "mySubDirOne");&&&&&&&&&&& System.IO.Directory.CreateDirectory(newPath);&&&&&&&&&&& //创建一个空白文件&&&&&&&&&&& string fileNameOne = DateTime.Now.ToString("yyyyMMddHHmmssffff")&&&&&&&&&&&&&&& + ".txt";&&&&&&&&&&& string filePathOne = System.bine(newPath, fileNameOne);&&&&&&&&&&& System.IO.FileInfo fi = new System.IO.FileInfo(filePathOne);&&&&&&&&&&& fi.Create();&#8226; 复制目录文件 代码如下://复制单个文件到指定目录&&&&&&&&&&& string fileName = "test.txt";&&&&&&&&&&& string sourcePath = @"C:\testDir\subTestDir";&&&&&&&&&&& string targetPath = @"C:\testDir\subTestDirTwo";&&&&&&&&&&& string sourceFile = System.bine(sourcePath, fileName);&&&&&&&&&&& string destFile = System.bine(targetPath, fileName);&&&&&&&&&&& if (!System.IO.Directory.Exists(targetPath))&&&&&&&&&&&&&&& System.IO.Directory.CreateDirectory(targetPath);&&&&&&&&&&& //如果已存在,参数为false时将报错,参数为true重写该文件&&&&&&&&&&& //当copy方法为两个参数时,默认重写为false。&&&&&&&&&&& System.IO.File.Copy(sourceFile, destFile, true);&&&&&&&&&&& //以下为复制一个目录下所有文件到指定目录&&&&&&&&&&& //如果复制有子目录的目录的所有文件,可以用递归或堆栈算法实现&&&&&&&&&&& if (System.IO.Directory.Exists(sourcePath))&&&&&&&&&&& {&&&&&&&&&&&&&&& string[] files = System.IO.Directory.GetFiles(sourcePath);&&&&&&&&&&&&&&& foreach (string s in files)&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&& //仅返回路径字符串的文件名及后缀&&&&&&&&&&&&&&&&&&& fileName = System.IO.Path.GetFileName(s);&&&&&&&&&&&&&&&&&&& destFile = System.bine(targetPath, fileName);&&&&&&&&&&&&&&&&&&& System.IO.File.Copy(s, destFile, true);&&&&&&&&&&&&&&& }&&&&&&&&&&& }&&&&&&& }&#8226; 移动目录和文件 代码如下:/*移动文件*/&&&&&&&&&&& string sourceFile = @"C:\testDir\subTestDir\test.txt";&&&&&&&&&&& string destFile = @"C:\testDir\subTestDirTwo\test.txt";&&&&&&&&&&& //当目标文件存在时,抛出异常&&&&&&&&&&& System.IO.File.Move(sourceFile, destFile);&&&&&&&&&&& /*移动目录*/&&&&&&&&&&& //移动目录将移动改目录的子目录和文件&&&&&&&&&&& System.IO.Directory.Move(@"C:\testDir\subTestDirTwo\", @"C:\testDir\subTestDir");&#8226; 删除目录和文件1、删除目录删除目录,如果该目录不存在,会抛出异常。可以通过File类的Delete方法删除目录,也可以通过FileInfo对象方法删除目录。(1)通过 File类的Delete方法删除目录 代码如下://删除可写空目录&&&&&&&&&&& //如果不为空抛出目录不为空异常&&&&&&&&&&& try&&&&&&&&&&& {&&&&&&&&&&&&&&& System.IO.Directory.Delete(@"C:\testDir\subTestDir");&&&&&&&&&&& }&&&&&&&&&&& catch (System.IO.IOException e)&&&&&&&&&&& {&&&&&&&&&&&&&&& Console.WriteLine(e.Message);&&&&&&&&&&& }&&&&&&&&&&& //第二参数为false时,只能删除空目录,否则抛出不为空异常&&&&&&&&&&& //第二参数为true时,删除目录,包括子目录和文件&&&&&&&&&&& try&&&&&&&&&&& {&&&&&&&&&&&&&&& System.IO.Directory.Delete(@"C:\testDir\subTestDir", true);&&&&&&&&&&& }&&&&&&&&&&& catch(System.IO.IOException e)&&&&&&&&&&& {&&&&&&&&&&&&&&& Console.WriteLine(e.Message);&&&&&&&&&&& }(2)通过FileInfo对象方法删除目录 代码如下:System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(@"C:\testDir\subTestDirTwo");&&&&&&&&&&& try&&&&&&&&&&& {&&&&&&&&&&&&&&& //无参数删除空目录&&&&&&&&&&&&&&& //当参数为false,可删除空目录;为true,删除目录,包括子目录和文件&&&&&&&&&&&&&&& di.Delete(true);&&&&&&&&&&& }&&&&&&&&&&& catch (System.IO.IOException e)&&&&&&&&&&& {&&&&&&&&&&&&&&& Console.WriteLine(e.Message);&&&&&&&&&&& }2、删除文件删除文件时如果指定文件的目录存在,而文件不存在,则不会抛出异常,如果指定文件的目录不存在,则会抛出异常。(1)通过File类Delete方法删除文件 代码如下:try&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&& System.IO.File.Delete(@"C:\testDir\subTestDir\test.txt");&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& catch(System.IO.IOException e)&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&& Console.WriteLine(e.Message);&&&&&&&&&&&&&&& }(2)通过FileInfo对象Delete方法删除文件 代码如下:System.IO.FileInfo fi = new System.IO.FileInfo(@"C:\testDir\subTestDir\test1.txt");&&&&&&&&&&& try&&&&&&&&&&& {&&&&&&&&&&&&&&& fi.Delete();&&&&&&&&&&& }&&&&&&&&&&& catch(System.IO.IOException e)&&&&&&&&&&& {&&&&&&&&&&&&&&& Console.WriteLine(e.Message);&&&&&&&&&&& }
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具文件操作是程序中非常基础和重要的内容,而路径、文件、目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题, 尽量提供一些解决方案,即使没有你想要的答案,也希望能提供给你一点有益的思路,如果你有好的建议,恳请能够留言,使这些内容更加完善。 主要内容:一、路径的相关操作, 如判断路径是否合法,路径类型,路径的特定部分,合并路径,系统文件夹路径等内容;二、相关通用文件对话框,这些对话框可以帮助我们操作文件系统中的文件和目录;三、文件、目录、驱动器的操作,如获取它们的基本信息,获取和设置文件和目录的属性,文件的版本信息,搜索文件和目录,文件判等,复制、移动、删除、重命名文件和目录;四、读写文件,包括临时文件,随机文件名等;五、对文件系统的监视; 这一篇就先写一下前两部分。一、路径相关操作问题1:如何判定一个给定的路径是否有效/合法;解决方案:通过Path.GetInvalidPathChars或Path.GetInvalidFileNameChars方法获得非法的路径/文件名字符,可以根据它来判断路径中是否包含非法字符;问题2:如何确定一个路径字符串是表示目录还是文件;解决方案:1、使用Directory.Exists或File.Exist方法,如果前者为真,则路径表示目录;如果后者为真,则路径表示文件;2、上面的方法有个缺点就是不能处理那些不存在的文件或目录。这时可以考虑使用Path.GetFileName方法获得其包含的文件名,如果一个路径不为空,而文件名为空那么它表示目录,否则表示文件;问题3:如何获得路径的某个特定部分(如文件名、扩展名等);解决方案:下面是几个相关方法:Path.GetDirectoryName :返回指定路径字符串的目录信息;Path.GetExtension : 返回指定的路径字符串的扩展名;Path.GetFileName : 返回指定路径字符串的文件名和扩展名;Path.GetFileNameWithoutExtension :返回不具有扩展名的路径字符串的文件名;Path.GetPathRoot :获取指定路径的根目录信息;(更多内容还请参考MSDN)问题4:如何准确地合并两个路径而不用去担心那个烦人的&\&字符;解决方案:使用bine方法,它会帮你处理烦人的&\&;问题5:如何获得系统目录的的路径(如桌面,我的文档,临时文件夹等);解决方案:主要是使用System. Environment类的相关属性和方法:Environment. SystemDirectory属性:获取系统目录的完全限定路径;Environment. GetFolderPath方法:该方法接受的参数类型为Environment.SpecialFolder枚举,通过这个方法可以获得大量系统文件夹的路径,如我的电脑,我的电脑,桌面,系统目录等;(更多内容还请参考MSDN);Path.GetTempPath方法:返回当前系统的临时文件夹的路径;问题6:如何判断一个路径是绝对路径还是相对路径;解决方案:使用Path.IsPathRooted方法;问题7:如何读取或设置当前目录;解决方案:使用Directory类的GetCurrentDirectory和SetCurrentDirectory方法;问题8:如何使用相对路径;解决方案:设置当前目录后(见问题7),就可以使用相对路径了。对于一个相对路径,我们可以使用Path.GetFullPath方法获得它的完全限定路径(绝对路径)。注意:如果打算使用相对路径,建议你将工作目录设置为各个交互文件的共同起点,否则可能会引入一些不易发现的安全隐患,被恶意用户利用来访问系统文件。更多内容:通常我们可以使用System.IO.Path类来处理路径。该类提供了一套方法和属性用于对包含文件或目录路径信息的字符串执行操作,这些操作是以跨平台的方式执行的,而这些方法和属性都是静态的。注
意路径仅仅是提供文件或目录位置的字符串。路径不必指向磁盘上的位置,例如,路径可以映射到内存中或设备上的位置。路径的准确格式是由当前平台确定的。例
如,在某些系统上,路径可以驱动器号或卷号开始,而此元素在其他系统中是不存在的。在某些系统上,文件路径可以包含扩展名,扩展名指示在文件中存储的信息
的类型。文件扩展名的格式是与平台相关的;例如,某些系统将扩展名的长度限制为 3
个字符,而其他系统则没有这样的限制。当前平台还确定用于分隔路径中各元素的字符集,以及确定在指定路径时不能使用的字符集。因为这些差异,所以
Path 类的字段以及 Path 类的某些成员的准确行为是与平台相关的。路径可以包含绝对或相对位置信息。绝对路径完整指定一个位置:文件或目录可被唯一标识,而与当前位置无关。相对路径指定部分位置:当定位用相对路径指定的文件时,当前位置用作起始点。Path
类的大多数成员不与文件系统交互,并且不验证路径字符串指定的文件是否存在。修改路径字符串的Path 类成员(例如
ChangeExtension)对文件系统中文件的名称没有影响。但Path成员确实验证指定路径字符串的内容;并且如果字符串包含在路径字符串中无效
的字符(如 InvalidPathChars 中的定义),则引发 ArgumentException异常。例如,在基于 Windows
的桌面平台上,无效路径字符可能包括引号 (")、小于号 (&)、大于号 (&)、管道符号 (|)、退格 (\b)、空 (\0)
以及从 16 到 18 和从 20 到 25的 Unicode 字符。Path 类的成员使您可以快速方便地执行常见操作,例如确定文件扩展名是否是路径的一部分,以及将两个字符串组合成一个路径名。多数情况下,如果这些方法接收了无效的路径会抛出异常,但如果路径名是因为包含了通配符(*或?)从而无效,则不会抛出异常(可以使用GetInvalidPathChars方法来非法的路径字符)。我们可以根据该原则判断一个路径是否合法。二、相关的通用文件对话框 1、文件夹浏览对话框(FolderBrowserDialog类)用户可以通过该对话框浏览、新建并选择文件夹 主要属性:Description:树视图控件上显示的说明文本,如上图中的&选择要进行计算的目录&;RootFolder:获取或设置从其开始浏览的根文件夹,如上图中设置的我的电脑(默认为桌面);SelectedPath:获取或设置用户选定的路径,如果设置了该属性,打开对话框时会定位到指定路径,默认为根文件夹,关闭对话框时根据该属性获取用户用户选定的路径;ShowNewFolderButton:获取或设置是否显示新建对话框按钮;主要方法:ShowDialog:打开该对话框,返回值为DialogResult类型值,如果为DialogResult.OK,则可以由SelectedPath属性获取用户选定的路径;
dlgOpenFolder.Description&=&"选择要进行计算的目录";&&&&dlgOpenFolder.RootFolder&=&Environment.SpecialFolder.MyC&&&&dlgOpenFolder.ShowNewFolderButton&=&&&&&DialogResult&result&=&dlgOpenFolder.ShowDialog(this);&&&&if&(result&==&DialogResult.OK)&&&&{&&&&&&&&txtDirPath.Text&=&dlgOpenFolder.SelectedP&&&&}
2、打开文件对话框(OpenFileDialog类)用户可以通过该对话框选择一个文件主要属性:CheckFileExists:该值指示如果用户指定不存在的文件名,对话框是否显示警告;FileName(s):获取或设置一个包含在文件对话框中选定的文件名的字符串;Filter:获取或设置对话框的文件类型列表;FilterIndex:对话框的文件类型列表的索引(基于1的);InitialDirectory:获取或设置文件对话框显示的初始目录;Multiselect:该值指示对话框是否允许选择多个文件;ShowReadOnly:该值指示对话框是否包含只读复选框;Title:获取或设置文件对话框标题;主要方法:OpenFile:打开用户选定的具有只读权限的文件;ShowDialog:打开该模式对话框;
dlgOpenFile.Title&=&"打开源文件";&&&&dlgOpenFile.InitialDirectory&=&@"C:\Inetpub\";&&&&dlgOpenFile.Filter&=&"文本文件&(*.txt)|*.txt|所有文件&(*.*)|*.*";&&&&dlgOpenFile.FilterIndex&=&2;&&&&dlgOpenFile.ShowReadOnly&=&&&&&DialogResult&dr&=&dlgOpenFile.ShowDialog();&&&&if&(dr&==&DialogResult.OK)&&&&{&&&&&&&&string&fileName&=&dlgOpenFile.FileN&&&&}
3、保存文件对话框(SaveFileDialog类)用户可以通过该对话框保存一个文件主要属性:大部分与打开文件对话框类似,此处略过,下面几个值得注意:CreatePrompt:该值指示如果用户指定不存在的文件,是否提示用户允许创建该文件;OverwritePrompt:该值指示如果用户指定的文件名已存在,对话框是否显示警告;主要方法:OpenFile:打开用户选定的具有读/写权限的文件;ShowDialog:打开该模式对话框;示例代码:
dlgSaveFile.Title&=&"打开目标文件";&&&&dlgSaveFile.InitialDirectory&=&@"C:\Inetpub\";&&&&dlgSaveFile.Filter&=&"文本文件&(*.txt)|*.txt|所有文件&(*.*)|*.*";&&&&dlgSaveFile.FilterIndex&=&2;&&&&DialogResult&dr&=&dlgSaveFile.ShowDialog();&&&&if&(dr&==&DialogResult.OK)&&&&{&&&&&&&&string&fileName&=&dlgSaveFile.FileN&&&&}
至此,我们操作的都只是路径,要知道,这些路径仅仅是字符串,还没有涉及到文件系统中的真实文件。 三、文件和目录相关操作文
件和目录操作涉及的类主要是:FileInfo,DirectoryInfo,DriveInfo,可以认为它们的一个实例对应着一个文件、目录、驱动
器。它们的用法类似,一般是将文件、目录或驱动器的路径作为参数传递给相应的构造函数创建一个实例,然后访问它们的属性和方法。注意下面几点:FileInfo
类和 DirectoryInfo 类都继承自抽象类 FileSystemInfo , FileSystemInfo 类定义了一些通用的属性,如
CreationTime 、 Exists 等。但 DriveInfo 类没有继承 FileSystemInfo
类,所以它也就没有上面提到的那些通用属性了。FileInfo 类和 DirectoryInfo
类的对象公开的属性值都是第一次查询时获取的值,如果在以此查询之后文件或目录发生了改动,就必须调用它们的 Refresh 方法来更新这些属性。但
DriveInfo 则无需这么做,它的属性每次都会读取文件系统最新的信息。在创建文件、目录或驱动器的实例时,如果使用了一个不存在
的路径,并不会报错,这是你得到一个对象,该对象表示一个并不存在的实体,这意味着它的 Exists 属性(对于 DriveInfo 来说是
IsReady 属性)值为 false 。你仍然可以操作该实体,但如果尝试其它的大多数属性,就会引发相应的
FileNotFoundException 、 DirectoryNotFoundException 或
DriveNotFoundException 异常。另外,还可以使用 File / Directory
类,这两个类的成员都是静态方法,所以如果只想执行一个操作,那么使用 File/Directory 中的静态方法的效率比使用相应的
FileInfo / DirectoryInfo中的 实例方法可能更高。所有的 File / Directory 方法都要求当前所操作的文件 /
目录的路径。 注意: File / Directory 类的静态方法对所有方法都执行安全检查。如果打算多次重用某个对象,可考虑改用
FileInfo / DirectoryInfo 的相应实例方法,因为并不总是需要安全检查。 下面是一些常见的问题:问题1:如何获取指定文件的基本信息;解决方案:可以使用FileInfo类的相关属性:FileInfo.Exists:获取指定文件是否存在;FileInfo.Name,FileInfo.Extensioin:获取文件的名称和扩展名;FileInfo.FullName:获取文件的全限定名称(完整路径);FileInfo.Directory:获取文件所在目录,返回类型为DirectoryInfo;FileInfo.DirectoryName:获取文件所在目录的路径(完整路径);FileInfo.Length:获取文件的大小(字节数);FileInfo.IsReadOnly:获取文件是否只读;FileInfo.Attributes:获取或设置指定文件的属性,返回类型为FileAttributes枚举,可以是多个值的组合(见问题2);FileInfo.CreationTime、FileInfo.LastAccessTime、FileInfo.LastWriteTime:分别用于获取文件的创建时间、访问时间、修改时间;(更多内容还请参考MSDN)问题2:如何获取和设置文件的属性,比如只读、存档、隐藏等;解决方案:使
用FileInfo.Attributes属性可以获取和设置文件的属性,该属性类型为FileAttributes枚举,该枚举的每个值表示一种属
性,FileAttributes枚举具有属性(Attribute)FlagsAttribute,所以该枚举的值可以进行组合,也就是一个文件可以同
时拥有多个属性。下面看看具体的做法:获取属性,比如判断一个文件是否是只读的:
//&当文件具有其它属性时,这种做法会失败&&&&if&(file.Attributes&==&FileAttributes.ReadOnly)&&&&{&&&&&&&&chkReadonly.Checked&=&&&&&}&&&&//&这种写法就不会有问题了,它只检查只读属性&&&&if&((file.Attributes&&&FileAttributes.ReadOnly)&==&FileAttributes.ReadOnly)&&&&{&&&&&&&&chkReadonly.Checked&=&&&&&}
设置属性,比如添加和移除一个文件的只读属性:
if&(chkReadonly.Checked)&&&&{&&&&&&&&//&添加只读属性&&&&&&&&file.Attributes&|=&FileAttributes.ReadO&&&&}&&&&else&&&&{&&&&&&&&//&移除只读属性&&&&&&&&file.Attributes&&=&~FileAttributes.ReadO&&&&}
问题3:如何获取文件的版本信息(比如版本号,版权声明,公司名称等);解决方案:使
用FileVersionInfo类,该类有大量的版本信息相关的属性。通过它的静态方法GetVersionInfo获得该类的一个实例,然后就可以访
问指定文件的版本信息了,非常方便。如FileVersion表示文件版本号,LegalCopyright表示指定文件的版权声
明,CompanyName表示指定文件的公司名称。(更多内容还请参考MSDN)问题4:如何判断两个文件的内容是否相同(精确匹配);解决方案:使用System.security.Cryptography.HashAlgorithm类为每个文件生成一个哈希码,然后比较两个哈希码是否一致。在比较文件内容的时候可以采用好几种方法。例如,检查文件的某一特定部分是否一致;如果愿意,你甚至可以逐字节读取文件,逐字节进行比较。这两种方法都是可以的,但在某些情况下,还是使用哈希码算法更为方便。该
算法为一个文件生成一个小的(通常约为20字节)二进制&指纹&(binary
fingerprint)。从统计学角度看,不同的文件不可能生成相同的哈希码。事实上,即使是一个很小的改动(比如,修改了源文件中的一个bit),也
会有50%的几率来改变哈希码中的每一个bit。因此,哈希码常常用于数据安全方面。要生成一个哈希码,你必须首先创建一个HashAlgorithm对象,而这通常是调用HashAlgorithm.Create方法来完成的;然后调用puteHash方法,它会返回一个存储哈希码的字节数组。代码如下:
///&&summary&&&&&///&判断两个文件内容是否一致&&&&///&&/summary&&&&&public&static&bool&IsFilesEqual(string&fileName1,&string&fileName2)&&&&{&&&&&&&&using&(HashAlgorithm&hashAlg&=&HashAlgorithm.Create())&&&&&&&&{&&&&&&&&&&&&using&(FileStream&fs1&=&new&FileStream(fileName1,&FileMode.Open),&fs2&=&new&FileStream(fileName2,&FileMode.Open))&&&&&&&&&&&&{&&&&&&&&&&&&&&&&byte[]&hashBytes1&=&puteHash(fs1);&&&&&&&&&&&&&&&&byte[]&hashBytes2&=&puteHash(fs2);&&&&&&&&&&&&&&&&//&比较哈希码&&&&&&&&&&&&&&&&return&(BitConverter.ToString(hashBytes1)&==&BitConverter.ToString(hashBytes2));&&&&&&&&&&&&}&&&&&&&&}&&&&}
问题5:如何获取指定目录的基本信息;解决方案:可以使用DirectoryInfo类的相关属性和方法:DirectoryInfo.Exists:获取指定目录是否存在;DirectoryInfo.Name:获取目录的名称;DirectoryInfo.FullName:获取目录的全限定名称(完整路径);DirectoryInfo.Attributes:获取或设置指定目录的属性,返回类型为FileAttributes枚举,可以是多个值的组合; DirectoryInfo.CreationTime、FileInfo.LastAccessTime、FileInfo.LastWriteTime:分别用于获取目录的创建时间、访问时间、修改时间;DirectoryInfo.Parent:获取目录的上级目录,返回类型为DirectoryInfo;DirectoryInfo.Root:获取目录的根目录,返回类型为DirectoryInfo;问题6:如何获取指定目录包含的文件和子目录;解决方案:DirectoryInfo.GetFiles():获取目录中(不包含子目录)的文件,返回类型为FileInfo[],支持通配符查找;DirectoryInfo.GetDirectories():获取目录(不包含子目录)的子目录,返回类型为DirectoryInfo[],支持通配符查找;DirectoryInfo. GetFileSystemInfos():获取指定目录下(不包含子目录)的文件和子目录,返回类型为FileSystemInfo[],支持通配符查找;问题7:如何获得指定目录的大小;解决方案:检查目录内的所有文件,利用FileInfo.Length属性获取每个文件的大小,然后进行合计,然后使用递归算法处理所有的子目录的文件,参考下面代码:
///&&summary&&&&&///&计算一个目录的大小&&&&///&&/summary&&&&&///&&param&name="di"&指定目录&/param&&&&&///&&param&name="includeSubDir"&是否包含子目录&/param&&&&&///&&returns&&/returns&&&&&private&long&CalculateDirSize(DirectoryInfo&di,&bool&includeSubDir)&&&&{&&&&&&&&long&totalSize&=&0;&&&&&&&&//&检查所有(直接)包含的文件&&&&&&&&FileInfo[]&files&=&di.GetFiles();&&&&&&&&foreach&(FileInfo&file&in&files)&&&&&&&&{&&&&&&&&&&&&totalSize&+=&file.L&&&&&&&&}&&&&&&&&//&检查所有子目录,如果includeSubDir参数为true&&&&&&&&if&(includeSubDir)&&&&&&&&{&&&&&&&&&&&&DirectoryInfo[]&dirs&=&di.GetDirectories();&&&&&&&&&&&&foreach&(DirectoryInfo&dir&in&dirs)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&totalSize&+=&CalculateDirSize(dir,&includeSubDir);&&&&&&&&&&&&}&&&&&&&&}&&&&&&&&return&totalS&&&&}
问题8:如何使用通配符搜索指定目录内的所有文件;解决方案:使用DirectoryInfo.GetFiles方法的重载版本,它可以接受一个过滤表达式,返回FileInfo数组,另外它的参数还可以指定是否对子目录进行查找。如:dir.GetFiles("*.txt", SearchOption.AllDirectories);问题9:如何复制、移动、重命名、删除文件和目录;解决方案:使用FileInfo和DirectoryInfo类。下面是FileInfo类的相关方法:FileInfo.CopyTo:将现有文件复制到新文件,其重载版本还允许覆盖已存在文件;FileInfo.MoveTo:将指定文件移到新位置,并提供指定新文件名的选项,所以可以用来重命名文件(而不改变位置); FileInfo.Delete:永久删除文件,如果文件不存在,则不执行任何操作;FileInfo.Replace:使用当前FileInfo对象对应文件的内容替换目标文件,而且指定另一个文件名作为被替换文件的备份,微软考虑实在周到。下面是DirectoryInfo类的相关方法:DirectoryInfo.Create:创建指定目录,如果指定路径中有多级目录不存在,该方法会一一创建;DirectoryInfo.CreateSubdirectory:创建当前对象对应的目录的子目录;DirectoryInfo.MoveTo:将目录(及其包含的内容)移动至一个新的目录,也可用来重命名目录;DirectoryInfo.Delete:删除目录(如果它存在的话)。如果要删除一个包含子目录的目录,要使用它的重载版本,以指定递归删除。注意到了没有?DirectoryInfo类少了一个CopyTo方法,不过我们可以通过递归来实现这个功能:
///&&summary&&&&&///&复制目录到目标目录&&&&///&&/summary&&&&&///&&param&name="source"&源目录&/param&&&&&///&&param&name="destination"&目标目录&/param&&&&&public&static&void&CopyDirectory(DirectoryInfo&source,&DirectoryInfo&destination)&&&&{&&&&&&&&//&如果两个目录相同,则无须复制&&&&&&&&if&(destination.FullName.Equals(source.FullName))&&&&&&&&{&&&&&&&&&&&&&&&&&&&&}&&&&&&&&//&如果目标目录不存在,创建它&&&&&&&&if&(!destination.Exists)&&&&&&&&{&&&&&&&&&&&&destination.Create();&&&&&&&&}&&&&&&&&//&复制所有文件&&&&&&&&FileInfo[]&files&=&source.GetFiles();&&&&&&&&foreach&(FileInfo&file&in&files)&&&&&&&&{&&&&&&&&&&&&//&将文件复制到目标目录&&&&&&&&&&&&file.bine(destination.FullName,&file.Name),&true);&&&&&&&&}&&&&&&&&//&处理子目录&&&&&&&&DirectoryInfo[]&dirs&=&source.GetDirectories();&&&&&&&&foreach&(DirectoryInfo&dir&in&dirs)&&&&&&&&{&&&&&&&&&&&&string&destinationDir&=&bine(destination.FullName,&dir.Name);&&&&&&&&&&&&//&递归处理子目录&&&&&&&&&&&&CopyDirectory(dir,&new&DirectoryInfo(destinationDir));&&&&&&&&}&&&&}
问题10:如何获得计算机的所有逻辑驱动器;解决方案:使用DriveInfo类(需要.NET 2.0)DriveInfo.GetDrives():获得计算机的所有逻辑驱动器,返回类型为DriveInfo[]; 问题11:如何获取指定驱动器的信息;解决方案:DriveInfo.Name:获取驱动器的名称(如C:\);DriveInfo.DriveType:获取驱动器的类型(如Fixed,CDRom,Removable,Network等);DriveInfo.DriveFormat:获取驱动器的格式(如NTFS,FAT32,CDFS,UDF等);DriveInfo.IsReady:获取驱动器是否已准备好,比如CD是否已放入CD驱动器,如果驱动器没有准备好,访问其信息会引发IOException类型异常;DriveInfo.AvailableFreeSpace:获取驱动器的可用空间;DriveInfo.TotalFreeSpace:获取驱动器总的可用空间,它与AvailableFreeSpace的不同在于AvailableFreeSpace会磁盘配额的设置;DriveInfo.TotalSize:获取驱动器总的空间;DriveInfo.RootDirectory:获得驱动器的根目录(DirectoryInfo类型);至此,我们已经了解了文件和目录相关的一些基本操作。文件读写相关类介绍:文件读写操作涉及的类主要是:MarshalByRefObject 类:允许在支持远程处理的应用程序中跨应用程序域边界访问对象;BinaryReader 类:用特定的编码将基元数据类型读作二进制值。BinaryWriter 类: 以二进制形式将基元类型写入流,并支持用特定的编码写入字符串。Stream 类: 提供字节序列的一般视图。FileStream类:公开以文件为主的 Stream,既支持同步读写操作,也支持异步读写操作。MemoryStream 类:创建其支持存储区为内存的流。BufferedStream 类:给另一流上的读写操作添加一个缓冲层。TextReader 类:表示可读取连续字符系列的阅读器。TextWriter 类:表示可以编写一个有序字符系列的编写器。StreamReader 类:实现一个 TextReader,使其以一种特定的编码从字节流中读取字符。StreamWriter 类:实现一个 TextWriter,使其以一种特定的编码向流中写入字符。StringReader 类:实现从字符串进行读取的 TextReader。StringWriter 类:实现一个用于将信息写入字符串的 TextWriter。该信息存储在基础StringBuilder中。在使用它们之前最好能了解它们的继承关系,有助于作出最合适的选择:另外还要注意一下FileInfo和File类的一些方法,如Create,CreateText,Open等,有时也会带来方便。这些类的内容比较繁多,更多内容还请参考MSDN。
阅读(...) 评论()

我要回帖

更多关于 求租执业药师证急急急 的文章

 

随机推荐