当前位置:文档之家› C#路径文件目录IO常见操作汇总

C#路径文件目录IO常见操作汇总

C#路径文件目录IO常见操作汇总
C#路径文件目录IO常见操作汇总

C#路径/文件/目录/I/O常见操作汇总

文件操作是程序中非常基础和重要的内容,而路径、文件、目录以及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:如何准确地合并两个路径而不用去担心那个烦人的”\”字符;

解决方案:

使用https://www.doczj.com/doc/2414348560.html,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.MyComputer; dlgOpenFolder.ShowNewFolderButton = true;

DialogResult result = dlgOpenFolder.ShowDialog(this);

if (result == DialogResult.OK)

{

txtDirPath.Text = dlgOpenFolder.SelectedPath;

}

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 = true;

DialogResult dr = dlgOpenFile.ShowDialog();

if (dr == DialogResult.OK)

{

string fileName = dlgOpenFile.FileName;

}

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.FileName;

}

至此,我们操作的都只是路径,要知道,这些路径仅仅是字符串,还没有涉及到文件系统中的真实文件。

三、文件和目录相关操作

文件和目录操作涉及的类主要是: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:获取指定文件是否存在;

https://www.doczj.com/doc/2414348560.html,,FileInfo.Extensioin:获取文件的名称和扩展名;

FileInfo.FullName:获取文件的全限定名称(完整路径);

FileInfo.Directory:获取文件所在目录,返回类型为DirectoryInfo;FileInfo.DirectoryName:获取文件所在目录的路径(完整路径);

FileInfo.Length:获取文件的大小(字节数);

FileInfo.IsReadOnly:获取文件是否只读;

FileInfo.Attributes:获取或设置指定文件的属性,返回类型为

FileAttributes枚举,可以是多个值的组合(见问题2);

FileInfo.CreationTime、https://www.doczj.com/doc/2414348560.html,stAccessTime、https://www.doczj.com/doc/2414348560.html,stWriteTime:分别用于获取文件的创建时间、访问时间、修改时间;

(更多内容还请参考MSDN)

问题2:如何获取和设置文件的属性,比如只读、存档、隐藏等;

解决方案:

使用FileInfo.Attributes属性可以获取和设置文件的属性,该属性类型为FileAttributes枚举,该枚举的每个值表示一种属性,FileAttributes枚举具有属性(Attribute)FlagsAttribute,所以该枚举的值可以进行组合,也就是一个文件可以同时拥有多个属性。下面看看具体的做法:

获取属性,比如判断一个文件是否是只读的:

// 当文件具有其它属性时,这种做法会失败

if (file.Attributes == FileAttributes.ReadOnly)

{

chkReadonly.Checked = true;

}

// 这种写法就不会有问题了,它只检查只读属性

if ((file.Attributes & FileAttributes.ReadOnly) == FileAttributes .ReadOnly)

{

chkReadonly.Checked = true;

}

设置属性,比如添加和移除一个文件的只读属性:

if (chkReadonly.Checked)

{

// 添加只读属性

file.Attributes |= FileAttributes.ReadOnly;

}

else

{

// 移除只读属性

file.Attributes &= ~FileAttributes.ReadOnly;

}

问题3:如何获取文件的版本信息(比如版本号,版权声明,公司名称等);

解决方案:

使用FileVersionInfo类,该类有大量的版本信息相关的属性。通过它的静态方法GetVersionInfo获得该类的一个实例,然后就可以访问指定文件的版本信息了,非常方便。如FileVersion表示文件版本号,LegalCopyright表示指定文件的版权声明,CompanyName表示指定文件的公司名称。(更多内容还请参考MSDN)

问题4:如何判断两个文件的内容是否相同(精确匹配);

解决方案:

使用System.security.Cryptography.HashAlgorithm类为每个文件生成一个哈希码,然后比较两个哈希码是否一致。

在比较文件内容的时候可以采用好几种方法。例如,检查文件的某一特定部分是否一致;如果愿意,你甚至可以逐字节读取文件,逐字节进行比较。这两种方法都是可以的,但在某些情况下,还是使用哈希码算法更为方便。

该算法为一个文件生成一个小的(通常约为20字节)二进制”指纹”(binary fingerprint)。从统计学角度看,不同的文件不可能生成相同的哈希码。事实上,即使是一个很小的改动(比如,修改了源文件中的一个bit),也会有50%的几率来改变哈希码中的每一个bit。因此,哈希码常常用于数据安全方面。

要生成一个哈希码,你必须首先创建一个HashAlgorithm对象,而这通常是调用HashAlgorithm.Create方法来完成的;然后调用https://www.doczj.com/doc/2414348560.html,puteHash 方法,它会返回一个存储哈希码的字节数组。代码如下:

///

/// 判断两个文件内容是否一致

///

public static bool IsFilesEqual(string fileName1, string fileName 2)

{

using (HashAlgorithm hashAlg = HashAlgorithm.Create())

{

using (FileStream fs1 = new FileStream(fileName1, FileMod e.Open), fs2 = new FileStream(fileName2, FileMode.Open))

{

byte[] hashBytes1 = https://www.doczj.com/doc/2414348560.html,puteHash(fs1);

byte[] hashBytes2 = https://www.doczj.com/doc/2414348560.html,puteHash(fs2);

// 比较哈希码

return (BitConverter.ToString(hashBytes1) == BitConve rter.ToString(hashBytes2));

}

}

}

问题5:如何获取指定目录的基本信息;

解决方案:可以使用DirectoryInfo类的相关属性和方法:

DirectoryInfo.Exists:获取指定目录是否存在;

https://www.doczj.com/doc/2414348560.html,:获取目录的名称;

DirectoryInfo.FullName:获取目录的全限定名称(完整路径);DirectoryInfo.Attributes:获取或设置指定目录的属性,返回类型为FileAttributes枚举,可以是多个值的组合;

DirectoryInfo.CreationTime、https://www.doczj.com/doc/2414348560.html,stAccessTime、

https://www.doczj.com/doc/2414348560.html,stWriteTime:分别用于获取目录的创建时间、访问时间、修改时间;DirectoryInfo.Parent:获取目录的上级目录,返回类型为DirectoryInfo;DirectoryInfo.Root:获取目录的根目录,返回类型为DirectoryInfo;

问题6:如何获取指定目录包含的文件和子目录;

解决方案:

DirectoryInfo.GetFiles():获取目录中(不包含子目录)的文件,返回类型为FileInfo[],支持通配符查找;

DirectoryInfo.GetDirectories():获取目录(不包含子目录)的子目录,

返回类型为DirectoryInfo[],支持通配符查找;

DirectoryInfo. GetFileSystemInfos():获取指定目录下(不包含子目录)的文件和子目录,

返回类型为FileSystemInfo[],支持通配符查找;

问题7:如何获得指定目录的大小;

解决方案:

检查目录内的所有文件,利用FileInfo.Length属性获取每个文件的大小,然后进行合计,然后使用递归算法处理所有的子目录的文件,参考下面代码:

///

/// 计算一个目录的大小

///

/// 指定目录

/// 是否包含子目录

///

private long CalculateDirSize(DirectoryInfo di, bool includeSubDi r)

{

long totalSize = 0;

// 检查所有(直接)包含的文件

FileInfo[] files = di.GetFiles();

foreach (FileInfo file in files)

{

totalSize += file.Length;

}

// 检查所有子目录,如果includeSubDir参数为true

if (includeSubDir)

{

DirectoryInfo[] dirs = di.GetDirectories();

foreach (DirectoryInfo dir in dirs)

{

totalSize += CalculateDirSize(dir, includeSubDir); }

}

return totalSize;

}

问题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方法,不过我们可以通过递归来实现这个功能:

///

/// 复制目录到目标目录

///

/// 源目录

/// 目标目录

public static void CopyDirectory(DirectoryInfo source, DirectoryI nfo destination)

{

// 如果两个目录相同,则无须复制

if (destination.FullName.Equals(source.FullName))

{

return;

}

// 如果目标目录不存在,创建它

if (!destination.Exists)

{

destination.Create();

}

// 复制所有文件

FileInfo[] files = source.GetFiles();

foreach (FileInfo file in files)

{

// 将文件复制到目标目录

file.CopyTo(https://www.doczj.com/doc/2414348560.html,bine(destination.FullName, https://www.doczj.com/doc/2414348560.html,) , true);

}

// 处理子目录

DirectoryInfo[] dirs = source.GetDirectories();

foreach (DirectoryInfo dir in dirs)

{

string destinationDir = https://www.doczj.com/doc/2414348560.html,bine(destination.FullName , https://www.doczj.com/doc/2414348560.html,);

// 递归处理子目录

CopyDirectory(dir, new DirectoryInfo(destinationDir));

}

}

问题10:如何获得计算机的所有逻辑驱动器;

解决方案:使用DriveInfo类(需要.NET 2.0)

DriveInfo.GetDrives():获得计算机的所有逻辑驱动器,返回类型为

DriveInfo[];

问题11:如何获取指定驱动器的信息;

解决方案:

https://www.doczj.com/doc/2414348560.html,:获取驱动器的名称(如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。

下面是一些常见的问题及其解决方案:

问题1:如何读写文本文件(并考虑不同的编码类型);

解决方案:

创建一个FileStream对象用以引用该文件。要写入文件,将FileStream对象封装在StreamWriter对象中,使用其重载了的Write方法;要读取文件,将FileStream对象封装在StreamReader对象中,使用其Read或ReadLine方法;.NET Framework允许通过StreamWriter和StreamReader类操作任何流来读写文本文件。当使用StreamWriter类写入数据时,调用它的Write方法,该方法在重载后可以支持所有常见的C#数据类型,包括字符串、字符、整数、浮点数以及十进制数等。但Write方法总会将的得到的数据转换为文本,如果希望将这些文本转换回原来的数据类型,应使用WriteLine方法,以确保每个值都处于单独的一行上。

字符串的表现形式取决于你使用的编码,最常见的编码类型包括下面几种:ASCII,UTF-16,UTF-7,UTF-8。

.NET Framework在System.Text命名空间中为每种编码类型提供了一个类。在

使用StreamWriter和StreamReader类时,可以指定需要的编码类型,或者使用默认的UTF-8。

而在读取文本文件时,则要使用StreamReader类的Read或ReadLine方法。Read 方法读取单个字符或者指定个数的字符,返回类型为字符或字符数组;ReadLine 方法则返回包含整行内容的字符串;ReadToEnd方法从当前位置读取至流的结尾。

(更多内容还请参考MSDN)

写入文本文件的示例:

using (FileStream fs = new FileStream(fileName, FileMode.Create))

{

// 创建一个StreamWriter对象,使用UTF-8编码格式

using (StreamWriter writer = new StreamWriter(fs, Encoding.UT F8))

{

// 分别写入十进制数,字符串和字符类型的数据

writer.WriteLine(123.45M);

writer.WriteLine("String Data");

writer.WriteLine('A');

}

}

读取文本文件的示例:

// 以只读模式打开一个文本文件

using (FileStream fs = new FileStream(fileName, FileMode.Open)) {

using (StreamReader reader = new StreamReader(fs, Encoding.UT F8))

{

string text = string.Empty;

while(!reader.EndOfStream)

{

text = reader.ReadLine();

txtMessage.Text += text + Environment.NewLine;

}

}

}

问题2:如何读写二进制文件(使用强数据类型);

解决方案:

创建一个FileStream对象用以引用该文件。要写入文件,将FileStream对象封

装在BinaryWriter对象中,使用其重载了的Write方法;要读取文件,将FileStream对象封装在BinaryReader对象中,使用相应数据类型的Read方法。.NET Framework允许通过BinaryWriter和BinaryReader类操作任何流来读写二进制数据。当使用BinaryWriter类写入数据时,调用它的Write方法,该方法在重载后可以支持所有常见的C#数据类型,包括字符串、字符、整数、浮点数以及十进制数等,然后数据会被编码为一系列字节写入文件,也可以配置该过程中的编码类型。

在使用二进制文件时,一定要特别注意其中的数据类型。当你读取数据时,一定要使用BinaryReader类的某种强类型的Read方法。例如,要读取字符串,要使用ReadString方法。(BinaryWriter在写入二进制文件时总会记录字符串的长度以避免任何可能的错误)

写入文件的示例:

using (FileStream fs = new FileStream(fileName, FileMode.Create))

{

using (BinaryWriter writer = new BinaryWriter(fs))

{

// 写入十进制数,字符串和字符

writer.Write(234.56M);

writer.Write("String");

writer.Write('!');

}

}

读取文件的示例:

// 以只读模式打开一个二进制文件

using (FileStream fs = new FileStream(fileName, FileMode.Open)) {

using (StreamReader sr = new StreamReader(fs))

{

MessageBox.Show("全部数据:" + sr.ReadToEnd());

fs.Position = 0;

using (BinaryReader reader = new BinaryReader(fs))

{

// 选用合适的数据类型读取数据

string message = reader.ReadDecimal().ToString() + En vironment.NewLine;

message += reader.ReadString() + Environment.NewLine; message += reader.ReadChar().ToString();

MessageBox.Show(message);

}

}

}

问题3:如何异步读取文件;

解决方案:

有时你需要读取一个文件但又不希望影响程序的执行。常见的情况是读取一个存储在网络驱动器上的文件。

FileStream提供了对异步操作的基本支持,即它的BeginRead和EndRead方法。使用这些方法,可以在.NET Framework线程池提供的线程中读取一个数据块,而无须直接与System.Threading命名空间中的线程类打交道。

采用异步方式读取文件时,可以选择每次读取数据的大小。根据情况的不同,你可能会每次读取很小的数据(比如,你要将数据逐块拷贝至另一个文件),也可能是一个相对较大的数据(比如,在程序逻辑开始之前需要一定数量的数据)。在调用BeginRead时指定要读取数据块的大小,同时传入一个缓冲区(buffer)以存放数据。因为BeginRead和EndRead需要访问很多相同的信息,如FileStream,buffer,数据块大小等,因此将这些内容封装一个单独的类当中是一个好主意。

下面这个类就是一个简单的示例。AsyncProcessor类提供了StartProcess方法,调用它开始读取,每次读取操作结束,OnCompletedRead回调函数会被触发,此时可以处理数据,如果还有剩余数据,则开始一个新的读取操作。默认情况下,AsyncProcessor类每次读取2KB数据。

class AsyncProcessor

{

private Stream inputStream;

// 每次读取块的大小

private int bufferSize = 2048;

public int BufferSize

{

get { return bufferSize; }

set { bufferSize = value; }

}

// 容纳接收数据的缓存

private byte[] buffer;

public AsyncProcessor(string fileName)

{

buffer = new byte[bufferSize];

// 打开文件,指定参数为true以提供对异步操作的支持

inputStream = new FileStream(fileName, FileMode.Open, Fil eAccess.Read, FileShare.Read, bufferSize, true);

}

public void StartProcess()

{

// 开始异步读取文件,填充缓存区

inputStream.BeginRead(buffer, 0, buffer.Length, OnComplet edRead, null);

}

private void OnCompletedRead(IAsyncResult asyncResult)

{

// 已经异步读取一个块,接收数据

int bytesRead = inputStream.EndRead(asyncResult);

// 如果没有读取任何字节,则流已达文件结尾

if (bytesRead > 0)

{

// 暂停以模拟对数据块的处理

Debug.WriteLine(" 异步线程:已读取一块");

Thread.Sleep(TimeSpan.FromMilliseconds(20));

// 开始读取下一块

inputStream.BeginRead(buffer, 0, buffer.Length, OnCom pletedRead, null);

}

else

{

// 结束操作

Debug.WriteLine(" 异步线程:读取文件结束");

inputStream.Close();

}

}

}

使用该类时可以这么写:

// 开始在另一线程中异步读取文件

AsyncProcessor asyncIO = new AsyncProcessor("test.txt");

asyncIO.StartProcess();

// 在主程序中,做其它事情,这里简单地循环10秒

DateTime startTime = DateTime.Now;

while (DateTime.Now.Subtract(startTime).TotalSeconds < 10)

{

Debug.WriteLine("主程序:正在进行");

// 暂停线程以模拟耗时的操作

Thread.Sleep(TimeSpan.FromMilliseconds(100));

}

Debug.WriteLine("主程序:已完成");

问题4:如何创建临时文件;

解决方案:

有时需要在特定用户的临时目录下创建一个临时文件,这要求该文件具有唯一的名称,避免与其它程序生成的临时文件相冲突。我们会有多种选择。最简单的是,在程序所在目录内使用GUID或时间戳加上随机值作为文件名称。但Path类提供的方法还是可以为你节省工作量,这就是它的静态GetTempFileName方法,它在当前用户的临时目录下创建一个临时文件(文件名称一定是唯一的),临时目录通常类似于这样:C:\Documents and Settings\[username]\Local

Settings\Temp。

string tempFile = Path.GetTempFileName();

using (FileStream fs = new FileStream(tempFile, FileMode.Open)) {

using (BinaryWriter writer = new BinaryWriter(fs))

{

// 写入数据

writer.Write("临时文件信息");

}

}

// Do something

// 最后删除临时文件

File.Delete(tempFile);

问题5:如何获得随机文件名;

解决方案:

使用Path.GetRandomFileName方法,它与GetTempFileName方法的不同之处在于它仅仅返回一个字符串但不会创建文件。

问题6:监视文件系统的变化;

解决方案:

如果指定路径内的文件发生改变(比如文件被修改或创建),你希望能对此作出反应。

如果程序与其它多个程序或业务处理相关,常常需要创建一个程序,并且只有文件系统发生变化时它才处于活动状态。你可以创建一个这样的程序,让它定期区检测指定目录,此时会发现有件事情让你苦恼:检测得越频繁,就会浪费越多的系统资源;而检测得越少,那么检测到变化的时间就会越长。

这时可以使用FileSystemWatcher组件,指定要进行监视的目录或文件,并处理其Created,Deleted,Renamed,Changed事件。

要使用FileSystemWatcher组件,首先要创建它的一个实例,然后设置下列属性:Path:指定要监视的目录;

Filter:指定要监视的文件类型,如”*.txt”;

NotifyFilter:指定要监视的变化类型;

FileSystemWatcher会引发四个关键的事件:Created,Deleted,Renamed,Changed。这些事件都在其FileSystemEventArgs参数中提供了相关文件的信息:如文件名,路径,改变类型,Renamed事件中还可以了解到改变前的文件名和路径。如果要禁用这些事件,则将它的EnableRaisingEvents属性设置为false。Created,Deleted,Renamed三个事件比较容易处理,但Changed事件就得当心了,你需要设置它的NotifyFilter属性以指示监视那些类型的变化。否则,程序会在文件被修改时淹没在不断发生的事件中(缓存区溢出)。

// 设置相关属性

watcher.Path = appPath;

watcher.Filter = "*.txt";

watcher.IncludeSubdirectories = true;

// 添加事件处理函数

watcher.Created += new FileSystemEventHandler(OnChanged);

watcher.Deleted += new FileSystemEventHandler(OnChanged);

watcher.Changed += new FileSystemEventHandler(OnChanged);

watcher.Renamed += new RenamedEventHandler(OnRenamed);

void OnRenamed(object sender, RenamedEventArgs e)

{

string renamedFormat = "File: {0} 被重命名为 :{1}";

txtChangedInfo.Text = string.Format(renamedFormat, e.OldFullP ath, e.FullPath);

}

void OnChanged(object sender, FileSystemEventArgs e)

{

// 显示通知信息

txtChangedInfo.Text = "文件: " + e.FullPath + "发生改变

" + Environment.NewLine;

txtChangedInfo.Text += "改变类型: " + e.ChangeType.ToString(); }

问题7:如何使用独立存储文件;

解决方案:

有时你需要将数据存储在文件中,但对本地硬盘驱动器却没有必要的权限(FileIOPermission)。这时要用到System.IO.IsolatedStorage命名空间中的类,这些类允许你的程序在特定用户的目录下将数据写入文件而不需要直接访问硬盘驱动器的权限:

// 创建当前用户的独立存储

using (IsolatedStorageFile store = IsolatedStorageFile.GetUserSto reForAssembly())

{

// 创建一个文件夹

store.CreateDirectory("MyFolder");

// 创建一个独立存储文件

using (Stream fs = new IsolatedStorageFileStream("MyFile.txt" , FileMode.Create, store))

{

StreamWriter writer = new StreamWriter(fs);

writer.WriteLine("Test Line!");

writer.Flush();

}

Debug.WriteLine("当前大小:

" + store.CurrentSize.ToString() + Environment.NewLine);

Debug.WriteLine("范围:

" + store.Scope.ToString() + Environment.NewLine);

string[] files = store.GetFileNames("*.*");

if (files.Length > 0)

{

Debug.WriteLine("当前文件:" + Environment.NewLine);

foreach (string file in files)

{

Debug.WriteLine(file + Environment.NewLine);

}

}

}

C语言文件流操作函数大全

clearerr(清除文件流的错误旗标) 相关函数feof 表头文件#include 定义函数void clearerr(FILE * stream); 函数说明clearerr()清除参数stream指定的文件流所使用的错误旗标。 返回值 fclose(关闭文件) 相关函数close,fflush,fopen,setbuf 表头文件#include 定义函数int fclose(FILE * stream); 函数说明fclose()用来关闭先前fopen()打开的文件。此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源。 返回值若关文件动作成功则返回0,有错误发生时则返回EOF并把错误代码存到errno。错误代码EBADF表示参数stream非已打开的文件。 范例请参考fopen()。 fdopen(将文件描述词转为文件指针) 相关函数fopen,open,fclose 表头文件#include 定义函数FILE * fdopen(int fildes,const char * mode); 函数说明fdopen()会将参数fildes 的文件描述词,转换为对应的文件指针后返回。参数mode 字符串则代表着文件指针的流形态,此形态必须和原先文件描述词读写模式相同。关于mode 字符串格式请参考fopen()。 返回值转换成功时返回指向该流的文件指针。失败则返回NULL,并把错误代码存在errno 中。 范例 #include main() { FILE * fp =fdopen(0,”w+”); fprintf(fp,”%s\n”,”hello!”); fclose(fp); } 执行hello! feof(检查文件流是否读到了文件尾) 相关函数fopen,fgetc,fgets,fread 表头文件#include 定义函数int feof(FILE * stream);

C语言文件操作大全

1.创建文件夹 //using System.IO; Directory.CreateDirectory(%%1); 2.创建文件 //using System.IO; File.Create(%%1); 3.删除文件 //using System.IO; File.Delete(%%1); 4.删除文件夹 //using System.IO; Directory.Delete(%%1); 5.删除一个目录下所有的文件夹 //using System.IO; foreach (string dirStr in Directory.GetDirectories(%%1)) { DirectoryInfo dir = new DirectoryInfo(dirStr); ArrayList folders=new ArrayList(); FileSystemInfo[] fileArr = dir.GetFileSystemInfos(); for (int i = 0; i < folders.Count; i++) { FileInfo f = folders[i] as FileInfo; if (f == null) { DirectoryInfo d = folders[i] as DirectoryInfo; d.Delete(); } } } 6.清空文件夹 //using System.IO; Directory.Delete(%%1,true); Directory.CreateDirectory(%%1); 7.读取文件 //using System.IO; StreamReader s = File.OpenText(%%1); string %%2 = null; while ((%%2 = s.ReadLine()) != null){

WORD文档操作大全

WORD文档操作大全 1. 问:WORD 里边怎样设置每页不同的页眉?如何使不同的章节显示的页眉不同? 答:分节,每节可以设置不同的页眉。文件――页面设置――版式――页眉和页脚――首页不同。 2. 问:请问word 中怎样让每一章用不同的页眉?怎么我现在只能用一个页眉,一改就全部改了? 答:在插入分隔符里,选插入分节符,可以选连续的那个,然后下一页改页眉前,按一下“同前”钮,再做的改动就不影响前面的了。简言之,分节符使得它们独立了。这个工具栏上的“同前”按钮就显示在工具栏上,不过是图标的形式,把光标移到上面就显示出”同前“两个字来。 3. 问:如何合并两个WORD 文档,不同的页眉需要先写两个文件,然后合并,如何做? 答:页眉设置中,选择奇偶页不同/与前不同等选项。 4. 问:WORD 编辑页眉设置,如何实现奇偶页不同? 比如:单页浙江大学学位论文,这一个容易设;双页:(每章标题),这一个有什么技巧啊? 答:插入节分隔符,与前节设置相同去掉,再设置奇偶页不同。 5. 问:怎样使WORD 文档只有第一页没有页眉,页脚? 答:页面设置-页眉和页脚,选首页不同,然后选中首页页眉中的小箭头,格式-边框和底纹,选择无,这个只要在“视图”――“页眉页脚”,其中的页面设置里,不要整个文档,就可以看到一个“同前”的标志,不选,前后的设置情况就不同了。 6. 问:如何从第三页起设置页眉? 答:在第二页末插入分节符,在第三页的页眉格式中去掉同前节,如果第一、二页还有页眉,把它设置成正文就可以了 ●在新建文档中,菜单―视图―页脚―插入页码―页码格式―起始页码为0,确定;●菜单―文件―页面设置―版式―首页不同,确定;●将光标放到第一页末,菜单―文件―页面设置―版式―首页不同―应用于插入点之后,确定。第2 步与第三步差别在于第2 步应用于整篇文档,第 3 步应用于插入点之后。这样,做两次首页不同以后,页码从第三页开始从1 编号,完成。 7. 问:WORD 页眉自动出现一根直线,请问怎么处理? 答:格式从“页眉”改为“清除格式”,就在“格式”快捷工具栏最左边;选中页眉文字和箭头,格式-边框和底纹-设置选无。 8. 问:页眉一般是---------,上面写上题目或者其它,想做的是把这根线变为双线,WORD 中修改页眉的那根线怎么改成双线的? 答:按以下步骤操作去做: ●选中页眉的文字,包括最后面的箭头●格式-边框和底纹●选线性为双线的●在预览里,点击左下小方块,预览的图形会出现双线●确定▲上面和下面自己可以设置,点击在预览周围的四个小方块,页眉线就可以在不同的位置。 9. 问:Word 中的脚注如何删除?把正文相应的符号删除,内容可以删除,但最后那个格式还在,应该怎么办? 答:步骤如下:1、切换到普通视图,菜单中“视图”――“脚注”,这时最下方出现了尾注的编辑栏。2、在尾注的下拉菜单中选择“尾注分隔符”,这时那条短横线出现了,选中它,删除。3、再在下拉菜单中选择“尾注延续分隔符”,这是那条长横线出现了,选中它,删除。

Delphi 文件操作集锦

Delphi 文件操作集锦 Delphi 文件操作集锦 时间:2011-5-26来源:yang 作者: peng点击: 11次Delphi 文件操作集锦 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses activex,comobj,shlobj; {$R *.dfm} function ResolveLink(const ALinkfile: String): String; var

link: IShellLink; storage: IPersistFile; filedata: TWin32FindData; buf: Array[0..MAX_PATH] of Char; widepath: WideString; begin OleCheck(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IShellLink, link)); OleCheck(link.QueryInterface(IPersistFile, storage)); widepath := ALinkFile; Result := ‘unable to resolve link‘; If Succeeded(storage.Load(@widepath[1], STGM_READ)) Then If Succeeded(link.Resolve(GetActiveWindow, SLR_NOUPDATE)) Then If Succeeded(link.GetPath(buf, sizeof(buf), filedata, SLGP_UNCPRIORITY)) Then Result := buf; storage := nil; link:= nil; end; // 用法: procedure TForm1.Button1Click(Sender: TObject);

C语言文件操作命令

C语言文件操作函数大全 clearerr(清除文件流的错误旗标) 相关函数 feof 表头文件 #include 定义函数 void clearerr(FILE * stream); 函数说明 clearerr()清除参数stream指定的文件流所使用的错误旗标。 返回值 fclose(关闭文件) 相关函数 close,fflush,fopen,setbuf 表头文件 #include 定义函数 int fclose(FILE * stream); 函数说明 fclose()用来关闭先前fopen()打开的文件。此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源。 返回值若关文件动作成功则返回0,有错误发生时则返回EOF并把错误代码存到errno。 错误代码 EBADF表示参数stream非已打开的文件。 范例请参考fopen()。 fdopen(将文件描述词转为文件指针) 相关函数 fopen,open,fclose 表头文件 #include 定义函数 FILE * fdopen(int fildes,const char * mode); 函数说明 fdopen()会将参数fildes 的文件描述词,转换为对应的文件指针后返回。参数mode 字符串则代表着文件指针的流形态,此形态必须和原先文件描述词读写模式相同。关于mode 字符串格式请参考fopen()。 返回值转换成功时返回指向该流的文件指针。失败则返回NULL,并把错误代码存在errno中。 范例 #include main() { FILE * fp =fdopen(0,”w+”); fprintf(fp,”%s\n”,”hello!”); fclose(fp); } 执行 hello! feof(检查文件流是否读到了文件尾) 相关函数 fopen,fgetc,fgets,fread 表头文件 #include 定义函数 int feof(FILE * stream); 函数说明 feof()用来侦测是否读取到了文件尾,尾数stream为fopen()所返

PB中文件操作函数大全

PB中文件操作函数大全 FileClose() 功能关闭先前用FileOpen()函数打开的文件。 语法FileClose ( fileno ) 参数fileno:integer,指定要关闭文件的文件句柄,该句柄使用FileOpen()函数打开文件时得到返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果fileno参数的值为NULL,那么FileClose()函数返回NULL。 FileDelete() 功能删除指定的文件。 语法FileDelete ( filename ) 参数filename:string类型,指定要删除文件的文件名,其中可以包含路径返回值Boolean。函数执行成 功时返回TRUE,发生错误时返回FALSE。如果filename参数的值为NULL,那么FileDelete()函数返回NULL。 FileExists() 功能检查指定的文件是否存在。 语法FileExists ( filename ) 参数filename:string类型,指定要检查存在性的文件的文件名,其中可以包含路径返回值Boolean。如 果指定文件存在时返回TRUE,不存在时返回FALSE。如果filename参数的值为NULL,那么FileExists()函数返回NULL。用法如果filename参数指定的文件被另一个应用加锁锁住,那么FileExists()函数也将返回FALSE。 FileLength() 功能得到指定文件的长度(以字节为单位)。 语法FileLength ( filename ) 参数filename:string类型,指定要得到其长度的文件的文件名,其中可以包含路径返回值Long。函数执行成功时返回指定文件的长度(以字节为单位)。如果指定的文件不存在,函数返回-1。如果filename参数的值为NULL,那么FileLength()函数返回NULL。 FileOpen() 功能以指定的读写方式打开指定的文件,同时返回该文件的句柄。 语法FileOpen(filename{,filemode{,fileaccess{,filelock{,writemode,{creator,filetype}}}}}) 参数filename:string类型,指定要打开文件的名称,其中可以包含路径filemode:FileMode枚举类型,可选项,指定文件打开方式。有效取值为:?LineMode! - 缺省值,行模式;?StreamMode! - 流模式fileaccess:FileAccess枚举类型,可选项,指定文件访问方式。有效取值为:?Read! - 缺省值,只读方式,这样打开的文件只能进行读操作;?Write! - 只写方式,这样打开的文件只能进行写操作?filelock:FileLock枚举类型,可选项,指定文件加锁方式。有效取值为:nLockReadWrite! - 缺省值,只有打开该文件的用户能够 访问该文件,其它用户对该文件的访问均被拒绝;nLockRead! - 只有打开该文件的用户能够读该文件,但

简易常用-Word文档使用技巧方法大全(超全)

Word文档使用技巧方法大全 Word2000、2003、2007、2010快捷键使用大全总结常用快捷键 快捷键作用 一、字体类 Ctrl+B 使字符变为粗体 Ctrl+I 使字符变为斜体 Ctrl+U 为字符添加下划线 Ctrl+Shift+D 双下划线 Ctrl+Shift+< 缩小字号 Ctrl+Shift+> 增大字号

Ctrl+] 逐磅增大字号 Ctrl+[ 逐磅减小字号 Ctrl+Shift+F 改变字体 Ctrl+Shift+P 改变字号 Ctrl+D 改变字符格式("格式"菜单中的"字体"命令) Shift+F3 切换字母大小写(一次首字母变成大写,两次单词变成大写) CTRL+SHIFT+A 将所选字母设为大写 二、格式类 Ctrl+Shift+C 复制格式 Ctrl+Shift+V 粘贴格式 Ctrl+1 单倍行距(1为主键盘的数字键) Ctrl+2 双倍行距

Ctrl+5 1.5 倍行距 Ctrl+0 在段前添加一行间距 Shift+F1(单击)需查看文字格式了解其格式的文字Ctrl+E 段落居中 Ctrl+J 两端对齐 Ctrl+L 左对齐 Ctrl+R 右对齐 Ctrl+Shift+J 分散对齐 Ctrl+M 左侧段落缩进 Ctrl+Shift+M 取消左侧段落缩进 Ctrl+T 创建悬挂缩进 Ctrl+Shift+T 减小悬挂缩进量

Ctrl+Shift+S 应用样式 Ctrl+Shift+N 应用"正文"样式 Alt+Ctrl+1 应用"标题1"样式 Alt+Ctrl+2 应用"标题2"样式 Alt+Ctrl+3 应用"标题3"样式 三、编辑和文字移动 Backspace 删除左侧的一个字符 Ctrl+Backspace 删除左侧的一个单词 Delete 删除右侧的一个字符 Ctrl+Delete 删除右侧的一个单词 F2(然后移动插入移动选取的文字或图形点并按Enter键)

python文件和目录操作方法大全

python文件和目录操作方法大全(含实例) 这篇文章主要介绍了python文件和目录的操作方法,简明总结了文件和目录操作中常用的模块、方法,并列举了一个综合实例,需要的朋友可以参考下 一、python中对文件、文件夹操作时经常用到的os模块和shutil模块常用方法。 1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 2.返回指定目录下的所有文件和目录名:os.listdir() 3.函数用来删除一个文件:os.remove() 4.删除多个目录:os.removedirs(r“c:\python”) 5.检验给出的路径是否是一个文件:os.path.isfile() 6.检验给出的路径是否是一个目录:os.path.isdir() 7.判断是否是绝对路径:os.path.isabs() 8.检验给出的路径是否真地存:os.path.exists() 9.返回一个路径的目录名和文件名:os.path.split() eg os.path.split('/home/swaroop/byte/code/poem.txt') 结果:('/home/swaroop/byte/code', 'poem.txt') 10.分离扩展名:os.path.splitext() 11.获取路径名:os.path.dirname() 12.获取文件名:os.path.basename() 13.运行shell命令: os.system() 14.读取和设置环境变量:os.getenv() 与os.putenv() 15.给出当前平台使用的行终止符:os.linesep Windows使用'\r\n',Linux使用'\n'而Mac使用'\r' 16.指示你正在使用的平台:https://www.doczj.com/doc/2414348560.html, 对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix' 17.重命名:os.rename(old,new) 18.创建多级目录:os.makedirs(r“c:\python\test”) 19.创建单个目录:os.mkdir(“test”) 20.获取文件属性:os.stat(file) 21.修改文件权限与时间戳:os.chmod(file) 22.终止当前进程:os.exit() 23.获取文件大小:os.path.getsize(filename) 二、文件操作方法大全: 1.os.mknod("test.txt") #创建空文件 2.fp = open("test.txt",w) #直接打开一个文件,如果文件不存在则创建文件 3.关于open 模式: 复制代码代码如下: w:以写方式打开, a:以追加模式打开(从EOF 开始, 必要时创建新文件) r+:以读写模式打开 w+:以读写模式打开(参见w ) a+:以读写模式打开(参见a ) rb:以二进制读模式打开

C语言文件操作函数大全

~~~~~~~~~~##打印了好好学习##~~~~~~~~~~歪诗协会QQ978107204 C语言文件操作函数大全 相关函数feof 表头文件#include 定义函数void clearerr(FILE * stream); 函数说明clearerr()清除参数stream指定的文件流所使用的错误旗标。 返回值 fclose(关闭文件) 相关函数close,fflush,fopen,setbuf 表头文件#include 定义函数int fclose(FILE * stream); 函数说明fclose()用来关闭先前fopen()打开的文件。此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源。 返回值若关文件动作成功则返回0,有错误发生时则返回EOF并把错误代码存到errno。 错误代码EBADF表示参数stream非已打开的文件。 范例请参考fopen()。 fdopen(将文件描述词转为文件指针) 相关函数fopen,open,fclose 表头文件#include 定义函数FILE * fdopen(int fildes,const char * mode); 函数说明fdopen()会将参数fildes 的文件描述词,转换为对应的文件指针后返回。参数mode 字符串则代表着文件指针的流形态,此形态必须和原先文件描述词读写模式相同。关于mode 字符串格式请参考fopen()。 返回值转换成功时返回指向该流的文件指针。失败则返回NULL,并把错误代码存在errno中。 范例 #include main() { FILE * fp =fdopen(0,”w+”); fprintf(fp,”%s\n”,”hello!”); fclose(fp); } 执行hello! feof(检查文件流是否读到了文件尾) 相关函数fopen,fgetc,fgets,fread 表头文件#include 定义函数int feof(FILE * stream); 函数说明feof()用来侦测是否读取到了文件尾,尾数stream为fopen()所返回之文件指针。如果已到文件尾则返回非零值,其他情况返回0。 返回值返回非零值代表已到达文件尾。 fflush(更新缓冲区) 相关函数write,fopen,fclose,setbuf 表头文件#include 定义函数int fflush(FILE* stream); 函数说明fflush()会强迫将缓冲区内的数据写回参数stream指定的文件中。如果参数stream为NULL,fflush()会将所有打开的文件数据更新。 返回值成功返回0,失败返回EOF,错误代码存于errno 中。 错误代码EBADF 参数stream 指定的文件未被打开,或打开状态为只读。其它错误代码参考write()。fgetc(由文件中读取一个字符) 相关函数open,fread,fscanf,getc 表头文件include 定义函数nt fgetc(FILE * stream); 函数说明fgetc()从参数stream所指的文件中读取一个字 符。若读到文件尾而无数据时便返回EOF。 返回值getc()会返回读取到的字符,若返回EOF则表示到了文件尾。 范例 #include main() { FILE *fp; int c; fp=fopen(“exist”,”r”); while((c=fgetc(fp))!=EOF) printf(“%c”,c); fclose(fp); } fgets(由文件中读取一字符串) 相关函数open,fread,fscanf,getc 表头文件include 定义函数har * fgets(char * s,int size,FILE * stream); 函数说明fgets()用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1个字符为止,最后会加上NULL作为字符串结束。 返回值gets()若成功则返回s指针,返回NULL则表示有错误发生。 范例 #include main() { char s[80]; fputs(fgets(s,80,stdin),stdout); } 执行this is a test /*输入*/ this is a test /*输出*/ fileno(返回文件流所使用的文件描述词) 相关函数open,fopen 表头文件#include 定义函数int fileno(FILE * stream); 函数说明fileno()用来取得参数stream指定的文件流所使用的文件描述词。 返回值返回文件描述词。 范例 #include main() { FILE * fp; int fd; fp=fopen(“/etc/passwd”,”r”); fd=fileno(fp); printf(“fd=%d\n”,fd); fclose(fp);

Word文档使用技巧方法大全(超全)

Word文档及快捷键 使用技巧方法大全 以下分别介绍word 2003、2000、2007、2010. 一、打造Word右键菜单 使用Word2000/2002编辑文档时,如果你经常要用到“首字下沉”命令,可以按下述方法将该命令加到“文字”右键菜单中: 1.在“工具”菜单中,单击“自定义”。 2.单击“工具栏”选项,单击“快捷菜单”,则“快捷菜单”工具栏出现在屏幕上。 3.单击“命令”选项,在“类别”框中单击“格式”,在“命令”框中,找到并单击“首字下沉”,然后用左键拖动“首字下沉”选项到“快捷菜单”工具栏的“文字”按钮上,此时将打开其下拉列表,继续拖动鼠标至下拉列表的“文字”处,再拖动鼠标到“文字”子菜单的最顶端,并松开鼠标左键。 4.单击“关闭”按钮。 现在,当你在文档中的任意文本处,单击鼠标右键,则弹出快捷菜单的顶端将是“首字下沉”命令,方便多了吧! 二、如果希望Word每次启动时都能自动打开某个文档,可以通过简单的宏命令来实现这个功能,方法是 2.在“录制宏”对话框中,在“宏名”输入框中输入要建立的宏的名称,如“auto”,点击“确定 3.从菜单中单击“文件”,点击最近打开文件列表中显示的某一个文件名 在Word2002中想保存多篇打开的文档,可以先按住Shift键,然后单击“文件”菜单,这时原来的“保存”命令就变成了“全部保存”命令,单击它就可以保存所有打开的Word文档。也可以先按住Shift键,然后用鼠标单击常用工具栏上的“保存”按钮,这时“保存”按钮的图标就变成“全部保存”的图标,松开鼠标,即保存完毕。 你可以一次性关闭所有打开的文档,方法是:按住Shift键,单击“文件”菜单,在“文件”菜单中将出现“全部关闭”选项,单击该命令即可一次性关闭所有打开的文档,且在关闭文档前Word将提示你保存所作的改动。 对于打开的多个Word文档,如果只想关闭其中的几个文档(不是全部关闭),可以按下Ctrl键再单击任务栏上要关闭的文档的图标,图标都呈凹下状态,在图标上单击鼠标右键,选择“关闭组”命令,可将所选中的文档全部关闭。 用这种方法还可以将所选文档最小化、还原或最大化。并且此法也适用于其它的0ffice组件,如Excel、PowerPoint、Access等。

Excel VBA操作文件大全

Excel-VBA操作文件四大方法之一__利用Excel对象来处理文件 在我们日常使用Excel的时候,不仅会用到当前Excel文件的数据,还经常需要访问其他的数据文件。这些数据文件可能是Excel文件、文本文件或数据库 文件等。经常有朋友会问如何在vba代码里操作这些数据文件?本文就系统地介绍一下在Excel中应用VBA操作数据文件的方法。 本文主要介绍四种常用的方法: 1、利用Excel对象来处理文件; 2、利用VBA文件处理语句来处理文件; 3、利用FileSystemObject对象来处理文件; 4、利用API函数来处理文件。 当然对于数据库文件,还可以利用ADO+SQL的方法操作,不过论坛已经有前辈详细介绍过此类方法,本文就不再重复了。 一、利用Excel对象来处理文件 利用Excel对象自带的方法来操作文件是最方便,也是最简单的。 我们主要利用Workbooks集合和Workbook对象的方法来操作文件。 1、打开Excel文件 我们可以用Workbooks.Open方法打开一个Excel工作簿。 Workbooks.Open(FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad) 其中FileName是必选的参数,表示要打开的工作簿名,如果没有指定路径,则代表当前路径。另外14个是可选参数,除了密码参数,其他的一般很少用。具体的含义可以参看VBA的帮助。 例: Workbooks.Open "F:\test.xls" 可以打开F盘的test.xls文件。 2、打开文本文件 使用Open方法也可以打开文本文件,但建议使用OpenText方法。此方法是载入一个文本文件,并将其作为包含单个工作表的工作簿进行分列处理,然后在此工作表中放入经过分列处理的文本文件数据。完整语法如下:Workbooks.OpenText(FileName, Origin, StartRow, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo, TextVisualLayout, DecimalSeparator, ThousandsSeparator, TrailingMinusNumbers, Local) 关于以上参数的具体含义可以参看VBA的帮助,这里就不重复了。在实际的编程中,一般无需对这些复杂的参数进行处理。可以通过录制宏来得到打开一个文本文件的VBA代码。具体方法就是选择“文件——打开”,然后选择打开文本文

(完整word版)WORD使用技巧大全(史上最强哦)(2),推荐文档

1.问:WORD里边怎样设置每页不同的页眉?如何使不同的章节显示的页眉不同? 答:分节,每节可以设置不同的页眉。文件——页面设置——版式——页眉和页脚——首页不同 2.问:请问word中怎样让每一章用不同的页眉?怎么我现在只能用一个页眉,一改就全部改了?答:在插入分隔符里,选插入分节符,可以选连续的那个,然后下一页改页眉前,按一下“同前”钮,再做的改动就不影响前面的了。简言之,分节符使得它们独立了。这个工具栏上的“同前”按钮就显示在工具栏上,不过是图标的形式,把光标移到上面就显示出”同前“两个字来了 3.问:如何合并两个WORD文档,不同的页眉需要先写两个文件,然后合并,如何做?答:页眉设置中,选择奇偶页不同/与前不同等选项 4.问:WORD编辑页眉设置,如何实现奇偶页不同? 比如:单页浙江大学学位论文,这一个容易设;双页:(每章标题),这一个有什么技巧啊?答:插入节分隔符,与前节设置相同去掉,再设置奇偶页不同 5.问:怎样使WORD文档只有第一页没有页眉,页脚?答:页面设置-页眉和页脚,选首页不同,然后选中首页页眉中的小箭头,格式-边框和底纹,选择无,这个只要在“视图”——“页眉页脚”,其中的页面设置里,不要整个文档,就可以看到一个“同前”的标志,不选,前后的设置情况就不同了。 6.问:如何从第三页起设置页眉?答:在第二页末插入分节符,在第三页的页眉格式中去掉同前节,如果第一、二页还有页眉,把它设置成正文就可以了

●在新建文档中,菜单—视图—页脚—插入页码—页码格式—起始页码为0,确定; ●菜单—文件—页面设置—版式—首页不同,确定; ●将光标放到第一页末,菜单—文件—页面设置—版式—首页不同—应用于插入点之后,确定。第2步与第三步差别在于第2步应用于整篇文档,第3步应用于插入点之后。这样,做两次首页不同以后,页码从第三页开始从1编号,完成。 7.问:WORD页眉自动出现一根直线,请问怎么处理?答:格式从“页眉”改为“清除格式”,就在“格式”快捷工具栏最左边;选中页眉文字和箭头,格式-边框和底纹-设置选无 8.问:页眉一般是---------,上面写上题目或者其它,想做的是把这根线变为双线,WORD中修改页眉的那根线怎么改成双线的?答:按以下步骤操作去做: ●选中页眉的文字,包括最后面的箭头 ●格式-边框和底纹 ●选线性为双线的 ●在预览里,点击左下小方块,预览的图形会出现双线 ●确定▲上面和下面自己可以设置,点击在预览周围的四个小方块,页眉线就可以在不同的位置

C语言文件操作函数大全(超详细).docx

fopen (打开文件) 相关函数open, fclose 表头文件#include 定义函数FILE * fopen (const char * path, const char * mode); 两数说明参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流 形态。 mode有下列几种形态字符串: r打开只读文件,该文件必须存在。 r+打开可读写的文件,该文件必须存在。 w打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 w+打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 a以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。 a+以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 复制代码代码如下: r Open text file for reading. The stream is positioned at the beginning o f the file. r+ Open for reading and writing. The stream is positioned at the beginning of the file. w Truncate file to zero length or create text file for writing? The strea m is positioned at the beginning of the file. w+ Open for reading and writing? The file is created if it does not exist, otherwise it is truncatod? The stream is posi -

PB中文件操作函数大全

PB中文件操作函数大全 () 功能关闭先前用()函数打开的文件。 语法( fileno ) 参数fileno:integer,指定要关闭文件的文件句柄,该句柄使用()函数打开文件时得到返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果fileno参数的值为NULL,那么()函数返回NULL。 () 功能删除指定的文件。 语法( ) 参数:string类型,指定要删除文件的文件名,其中可以包含路径返回值Boolean。函数执行成功时返回TRUE,发生错误时返回FALSE。如果参数的值为NULL,那么()函数返回NULL。 () 功能检查指定的文件是否存在。 语法( ) 参数:string类型,指定要检查存在性的文件的文件名,其中可以包含路径返回值Boolean。如果指定文件存在时返回TRUE,不存在时返回FALSE。如果参数的值为NULL,那么()函数返回NULL。用法如果参数指定的文件被另一个应用加锁锁住,那么()函数也将返回FALSE。 () 功能得到指定文件的长度(以字节为单位)。 语法( ) 参数:string类型,指定要得到其长度的文件的文件名,其中可以包含路径返回值Long。函数执行成功时返回指定文件的长度(以字节为单位)。如果指定的文件不存在,函数返回-1。如果参数的值为NULL,那么()函数返回NULL。 () 功能以指定的读写方式打开指定的文件,同时返回该文件的句柄。 语法({,{,{,{,writemode,{creator,}}}}}) 参数:string类型,指定要打开文件的名称,其中可以包含路径:枚举类型,可选项,指定文件打开方式。有效取值为:?LineMode! - 缺省值,行模式;?StreamMode! - 流模式:枚举类型,可选项,指定文件访问方式。有效取值为:?Read! - 缺省值,只读方式,这样打开的文件只能进行读操作;?Write! - 只写方式,这样打开的文件只能进行写操作?:枚举类型,可选项,指定文件加锁方式。有效取值为:n LockReadWrite! - 缺省值,只有打开该文件的用户能够访问该文件,其它用户对该文件的访问均被拒绝;n LockRead! - 只有打开该文件的用户能够读该文件,但其它任何用户均可写该文件;n LockWrite! - 只有打开该文件的用户能够写该文件,但其它任何用户均可读该文件;n Shared! - 所有用户均可读写该文件writemode:WriteMode枚举类型,可选项,当参数指定为Write!时,该参数指定在指定文件已经存在时数据的添加方式。有效取值为:?Append! - 缺省值,将数据添加到原文件尾部;?Replace! - 覆盖原有数据creator:可

Js操作文本文件大全

Js对文件操作大全 1. 读取某目录的文件名及统计信息(js方法) 2. 打开文件 //打开文件 OpenTextFile 方法 打开指定的文件并返回一个TextStream对象,可以通过这个对象对文件进行读、写或追加。object.OpenTextFile(filename[,iomode[,create[,format]]]) 参数 object必选项。object应为FileSystemObject的名称。 filename必选项。指明要打开文件的字符串表达式。 iomode可选项。可以是三个常数之一,1:以只读方式打开文件。不能写这个文件;2:以写方式打开文件;8:打开文件并从文件末尾开始写。 create可选项。Boolean 值,指明当指定的filename不存在时是否创建新文件。如果创建新文件则值为True,如果不创建则为False。如果忽略,则不创建新文件。 format可选项。使用三态值中的一个来指明打开文件的格式。如果忽略,那么文件将以ASCII 格式打开。TristateTrue:以Unicode 格式打开文件;TristateFalse:以ASCII 格式打开文件;TristateUseDefault:使用系统默认值打开文件。 fso=new ActiveXObject("Scripting.FileSystemObject"); var f1 = fso.OpenTextFile("D:/CHARGE_COIN.txt",8,true); f1.WriteLine("Hello World!"); f1.WriteBlankLines(1);//换行 //var text = f1.ReadLine();//读取一行 var text = f1.ReadAll(); //读取整个文件内容

常用C语言文件操作函数大全

C语言文件操作函数大全 相关函数 feof 表头文件 #include 定义函数 void clearerr(FILE * stream); 函数说明 clearerr()清除参数stream指定的文件流所使用的错误旗标。 返回值 fclose(关闭文件) 相关函数 close,fflush,fopen,setbuf 表头文件 #include 定义函数 int fclose(FILE * stream); 函数说明 fclose()用来关闭先前fopen()打开的文件。此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源。 返回值若关文件动作成功则返回0,有错误发生时则返回EOF并把错误代码存到errno。 错误代码 EBADF表示参数stream非已打开的文件。 范例请参考fopen()。 fdopen(将文件描述词转为文件指针) 相关函数 fopen,open,fclose 表头文件 #include

定义函数 FILE * fdopen(int fildes,const char * mode); 函数说明 fdopen()会将参数fildes 的文件描述词,转换为对应的文件指针后返回。参数mode 字符串则代表着文件指针的流形态,此形态必须和原先文件描述词读写模式相同。关于mode 字符串格式请参考fopen()。 返回值转换成功时返回指向该流的文件指针。失败则返回NULL,并把错误代码存在errno中。 范例 #include main() { FILE * fp =fdopen(0,”w+”); fprintf(fp,”%s\n”,”hello!”); fclose(fp); } 执行 hello! feof(检查文件流是否读到了文件尾) 相关函数 fopen,fgetc,fgets,fread 表头文件 #include 定义函数 int feof(FILE * stream); 函数说明 feof()用来侦测是否读取到了文件尾,尾数stream为fopen()所返回之文件指针。如果已到文件尾则返回非零值,其他情况

C#中的文件操作大全

C#中的文件操作大全 1.创建文件夹 //using System.IO; Directory.CreateDirectory(%%1);2.创建文件 //using System.IO; File.Create(%%1);3.删除文件 //using System.IO; File.Delete(%%1);4.删除文件夹 //using System.IO; Directory.Delete(%%1);5.删除一个目录下所有的文件夹//using System.IO;

foreach (string dirStr in Directory.GetDirectories(%%1)) { DirectoryInfo dir = new DirectoryInfo(dirStr); ArrayList folders=new ArrayList(); FileSystemInfo[] fileArr = dir.GetFileSystemInfos(); for (int i = 0; i < folders.Count; i++) { FileInfo f = folders[i] as FileInfo; if (f == null) { DirectoryInfo d = folders[i] as DirectoryInfo;

Directory.Delete(%%1+"//"+https://www.doczj.com/doc/2414348560.html,); } } } 6.清空文件夹 //using System.IO; Directory.Delete(%%1,true); Directory.CreateDirectory(%%1); 7.读取文件 //using System.IO; StreamReader s = File.OpenText(%%1); string %%2 = null; while ((%%2 = s.ReadLine()) != null){

相关主题
相关文档 最新文档