码迷,mamicode.com
首页 > Windows程序 > 详细

C# - 文件操作

时间:2017-12-24 14:45:07      阅读:302      评论:0      收藏:0      [点我收藏+]

标签:getdir   setattr   employee   toc   rar   count()   data-   获取文件   proc   

文件操作 File Operation

程序中所有数据都以流的形式进行传输,流分字节流和字符流。读取文件就是输入流,保存到文件就是输出流,操作Unicode编码的数据就是处理以两个字节为单位的字符流,操作以一个字节为单位的数据就是处理字节流,前者输入到string变量以便操作,后者则输入到byte数组变量以便操作(byte数组的每个元素就是8个位,也即每个单位都是一个字节)。一个文档保存的字符数据其实都是以byte进行存储,系统会将字符的编码(二进制的ASCII编码或十进制的Unicode编码)存储到磁盘文件里。打开文件后,可以读取字符或字节(一个字节一个字节地读取)。编码类UnicodeEncoding提供两个方法用于将字节序列转换为字符或将字符转换为字节序列。

 

UnicodeEncoding类

GetBytes(char[] charArray)
//获取字符的字节序列,返回一个byte[]数组
//示例:
UnicodeEncoding encoding = new UnicodeEncoding();
byte[] strByte = encoding.GetBytes("hello word!".ToCharArray());

GetString(byte[] strByte)
//示例:
UnicodeEncoding encoding = new UnicodeEncoding();
byte[] strByte = encoding.GetBytes("hello word!".ToCharArray());
encoding.GetString(strByte);

 

Stream类

提供对字节流的读写操作,它是以字节的形式操作数据。

FileStream类

提供对文件字节流的读写操作,它从Stream派生,同样是以字节的形式操作数据。无构造函数,只能靠File或FileInfo类的打开文件的方法(Open()等方法)创建。

MemoryStream类

此类用于向内存读写数据而非向文件读写数据。提供对内存中的字节流的读写操作,它从Stream派生,同样是以字节的形式操作数据

//写入内存流           
MemoryStream memory = new MemoryStream(new byte[20]);            
UnicodeEncoding unicode = new UnicodeEncoding();
byte[] strByteArray = unicode.GetBytes("hello word");//将字符串编码为字节序列,存入字节数组            
memory.Write(strByteArray, 0, strByteArray.Length);//将整个字节序列写入内存

//读取内存流            
memory.Seek(0SeekOrigin.Begin);
byte[] byteArray = new byte[memory.Length];            
int count = memory.Read(byteArray, 0, strByteArray.Length);//将读取的数据存入字节数组,返回字节总数            
char[] charArray = new char[unicode.GetCharCount(byteArray, 0, count)];//解码字节数组,将结果字符存入char数组
unicode.GetDecoder().GetChars(byteArray, 0, count, charArray, 0);
string result = new string(charArray);
Console.WriteLine(result);

Path类

Path.GetInvalidPathChars()
//获取默认的关于文件夹路径可能的非法字符列表,返回一个char[]存储这些内置的非法字符

Path.GetInvalidFileNameChars();
//获取默认的关于文件路径可能的非法字符列表,返回一个char[]存储这些内置的非法字符

File

与FileInfo的区别在于,此类提供操作文件的静态方法,而FileInfo需要创建实例,如果频繁操作文件,应考虑使用FileInfo。File类没有任何属性,它只提供一个FileAttributes枚举来表示文件的属性,而FileInfo类则提供了N多个属性来表示文件的属性。

Open(string path, FileMode model, FileAccess access)
//打开一个文件,返回一个FileStream对象。如果文件不存在则通过FileMode指定应创建该文件
//-------FileMode枚举可能的值如下:-------
//CreateNew:创建新文件,如果文件已经存在,则引发IOException;
//Create:创建新文件,如果文件已经存在,原文件将被覆盖;
//Open:打开现有文件,如果文件不存在,则引发FileNotFoundException;
//OpenOrCreate:打开文件,如果文件不存在,则创建新文件;
//Truncate:打开现有文件,文件一旦打开,就将截断为零字节大小;
//Append:打开先有文件并把指针移动至文件尾,如果文件不存在将创建新文件。此枚举值必须同FileAccess.Write一起使用
//-------FileAccess枚举可能的值如下:-------
//Read:只读;
//Write:只写;
//ReadWrite:读写;
//示例:
FileStream stream = File.Open(@"d:/test.txt"FileMode.OpenOrCreate, FileAccess.ReadWrite);
UnicodeEncoding encoding = new UnicodeEncoding();
byte[] strByte = encoding.GetBytes("hello word!".ToCharArray());
stream.Write(strByte, 0, strByte.Count());


//以下两个方法都是以只读的方式打开文件,都返回一个FileStream对象
OpenRead、OpenWrite

//以下三个方法都是打开文件并全部读取后关闭
ReadAllBytes、ReadAllLines、ReadAllText

//以下三个方法都是创建一个文件并全部写入后关闭
WriteAllBytes、WriteAllLines、WriteAllText

ReadLines(String str | String str, Encoding encoding)
//读取文件的行
//示例:
foreach (string line in File.ReadLines(@"d:\test.txt"))
{
    if (line.Contains("episode"& line.Contains("2006"))
    {
        Console.WriteLine(line);
    }
}

//此类还提供了操作文件的其它方法:
//AppendAllLines(追加)、Copy(拷贝)、Move(移动)、
//Create(创建)、Delete(删除)、Encrypt(加密)、Decrypt(解密)
//Exists(是否存在)、Replace(用另一个文件的内容替换当前文件的内容)、
//Get / SetAttributes(设置或获取属性)、Get / SetCreationTime(设置或获取创建时间)、Get / SetLastAccessTime(获取或设置最近一次访问的时间)

FileInfo类

除了具有File的方法以外,它提供一系列的属性来表示文件的属性。 

Attributes
//获取或设置当前文件或目录的特性

CreationTime
//获取或设置当前文件或目录的创建时间

CreationTimeUtc
//获取或设置当前文件或目录的创建时间,其格式为协调世界时(UTC)

Directory
//获取父目录的实例。

DirectoryName
//获取表示目录的完整路径的字符串

Exists
//获取指示文件是否存在的值。(覆盖 FileSystemInfo.Exists)

Extension
//获取表示文件扩展名部分的字符串

FullName
//获取目录或文件的完整目录

IsReadOnly
//获取或设置确定当前文件是否为只读的值

LastAccessTime
//获取或设置上次访问当前文件或目录的时间

LastAccessTimeUtc
//获取或设置上次访问当前文件或目录的时间,其格式为协调世界时(UTC)

LastWriteTime
//获取或设置上次写入当前文件或目录的时间

LastWriteTimeUtc
//获取或设置上次写入当前文件或目录的时间,其格式为协调世界时(UTC)

Length
//获取当前文件的大小(以字节为单位)

Name
//获取文件名

Directory类

CreateDirectory(string path[string])
//创建目录,如果字符路径包含子目录名称,将一并创建
//示例:
string path = @"e:/Animal/Person/Employee/";
DirectoryInfo dir = Directory.CreateDirectory(path);

EnumerateDirectories(string path)
//返回一个IEnumerable<string>集合,存储了每个目录的名称的字符表示,类似的有DirectoryInfo的EnumerateDirectories方法,返回一个IEnumerable<DirectoryInfo>集合,存储每个目录的实例
//也可以使用GetDirectories,该方法返回string[],类似的有DirectoryInfo的GetDirectories,返回DirectoryInfo[]

EnumerateFiles(string path,[string search])
//返回一个IEnumerable<string>集合,存储了当前目录下的文件的名称的字符表示,类似的有DirectoryInfo的EnumerateFiles方法,返回一个IEnumerable<FileInfo>集合,存储每个文件的实例
//也可以使用GetFiles,该方法返回string[],类似的有DirectoryInfo的GetFiles,返回FileInfo[]
//示例:
string path = @"e/";
var txtFiles = Directory.EnumerateFiles(path, "*.txt");
var fileNameStr = txtFiles.Where(fileName => fileName.Contains("a"));
GetCurrentDirectory()
//获取当前应用程序的工作目录

GetDirectories(string path)
//返回一个string[],存储了当前目录的子目录集合,类似的有DirectoryInfo的GetDirectories方法,返回一个DirectoryInfo[],存储了当前目录的每个子目录的实例

GetDirectoryRoot(string path)
//返回目录的卷信息和根信息

GetParent(string path)
//获取当前目录的父目录,返回一个DirectoryInfo实例表示父目录,类似的有DirectoryInfo的Parent属性

SetCurrentDirectory(string path)
//将当前应用程序的工作目录设置为参数指定的目录

//此类还提供了操作文件的其它方法:
//Delete(删除)、Exists(是否存在)、Move(移动)[等同于DirectoryInfo的MoveTo方法]
//Get/SetCreationTime(设置或获取创建时间)、Get/SetLastAccessTime(最近一次访问目录的时间)、Get/SetLastWriteTime(最近一次写入数据到目录的时间)

DirectoryInfo类

除了具有Directory类的方法以外,它提供一系列的属性来表示目录的属性。

Attributes
//获取或设置当前文件或目录的特性。

CreationTime
//获取或设置当前文件或目录的创建时间。

CreationTimeUtc
//获取或设置当前文件或目录的创建时间,其格式为协调世界时(UTC)。

Exists
//获取指示目录是否存在的值。(覆盖 FileSystemInfo.Exists。)

Extension
//获取表示文件扩展名部分的字符串。

FullName
//获取目录的完整路径。(覆盖 FileSystemInfo.FullName。)

LastAccessTime
//获取或设置上次访问当前文件或目录的时间。

LastAccessTimeUtc
//获取或设置上次访问当前文件或目录的时间,其格式为协调世界时(UTC)。

LastWriteTime
//获取或设置上次写入当前文件或目录的时间。

LastWriteTimeUtc
//获取或设置上次写入当前文件或目录的时间,其格式为协调世界时(UTC)。

Name
//获取此 DirectoryInfo 实例的名称。(覆盖 FileSystemInfo.Name。)

Parent
//获取指定的子目录的父目录。

Root
//获取目录的根部分。

 

 C# - 学习总目录

C# - 文件操作

标签:getdir   setattr   employee   toc   rar   count()   data-   获取文件   proc   

原文地址:http://www.cnblogs.com/myrocknroll/p/8052405.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!