C# 中的高级文件操作
前面的示例提供了C# 中的简单文件操作。但是,要利用C# System.IO类的强大功能,您需要了解这些类的常用属性和方法。
读取和写入文本文件
它涉及读取和写入文本文件。该的StreamReader和StreamWriter的类可以帮助来完成它。
StreamReader 方法
- public override void Close() - 它关闭StreamReader对象和基础流,并释放与阅读器关联的所有系统资源。
- public override int Peek() - 返回下一个可用字符,但不使用它。
- public override int Read() - 从输入流中读取下一个字符,并将字符位置前移一个。
treamWriter 方法
- public override void Close() - 关闭当前的StreamWriter对象和基础流。
- public override void Flush() - 清除当前写入器的所有缓冲区,并使所有缓冲的数据写入基础流。
- public virtual void Write(bool value) - 将布尔值的文本表示形式写入文本字符串或流。 (继承自TextWriter。)
- public override void Write(char value) - 将字符写入流。
- public virtual void Write(decimal value) - 将十进制值的文本表示形式写入文本字符串或流。
- public virtual void Write(double value) - 将8字节浮点值的文本表示形式写入文本字符串或流。
- public virtual void Write(int value) - 将4字节有符号整数的文本表示形式写入文本字符串或流。
- public override void Write(string value) - 将字符串写入流。
- public virtual void WriteLine() - 将行终止符写入文本字符串或流。
using System;
using System.IO;
namespace FileApplication {
class Program {
static void Main(string[] args) {
try {
// Create an instance of StreamReader to read from a file.
// The using statement also closes the StreamReader.
using (StreamReader sr = new StreamReader("c:/jamaica.txt")) {
string line;
// Read and display lines from the file until
// the end of the file is reached.
while ((line = sr.ReadLine()) != null) {
Console.WriteLine(line);
}
}
} catch (Exception e) {
// Let the user know what went wrong.
Console.WriteLine("The file could not be read:");
Console.WriteLine(e.Message);
}
Console.ReadKey();
}
}
}
using System;
using System.IO;
namespace FileApplication {
class Program {
static void Main(string[] args) {
string[] names = new string[] {"Zara Ali", "Nuha Ali"};
using (StreamWriter sw = new StreamWriter("names.txt")) {
foreach (string s in names) {
sw.WriteLine(s);
}
}
// Read and show each line from the file.
string line = "";
using (StreamReader sr = new StreamReader("names.txt")) {
while ((line = sr.ReadLine()) != null) {
Console.WriteLine(line);
}
}
Console.ReadKey();
}
}
}
读取和写入二进制文件 - 它涉及读取和写入二进制文件。该BinaryReader在和的BinaryWriter类可以帮助实现这一目标。
BinaryReader 类方法
- public override void Close() 它关闭BinaryReader对象和基础流。
- public virtual int Read() 从基础流中读取字符并前进流的当前位置。
- public virtual bool ReadBoolean() 从当前流中读取布尔值,并将流的当前位置前移一个字节。
- public virtual byte ReadByte() 从当前流中读取下一个字节,并将流的当前位置前移一个字节。
- public virtual byte[] ReadBytes(int count) 从当前流中将指定数量的字节读取到字节数组中,并将当前位置前移该字节数量。
- public virtual char ReadChar() 从当前流中读取下一个字符,并根据所使用的编码和从流中读取的特定字符来推进流的当前位置。
- public virtual char[] ReadChars(int count) 从当前流中读取指定数量的字符,返回字符数组中的数据,并根据使用的编码和从流中读取的特定字符来推进当前位置。
- public virtual double ReadDouble() 从当前流中读取一个8字节的浮点值,并将该流的当前位置前移8个字节。
- public virtual int ReadInt32() 从当前流中读取一个4字节有符号整数,并将该流的当前位置前移四个字节。
- public virtual string ReadString() 从当前流中读取一个字符串。该字符串以长度为前缀,一次编码为7位整数。
BinaryWriter 类方法
- public override void Close() - 它关闭BinaryWriter对象和基础流。
- public virtual void Flush() - 清除当前写入器的所有缓冲区,并使所有缓冲的数据写入底层设备。
- public virtual long Seek(int offset, SeekOrigin origin) - 设置当前流中的位置。
- public virtual void Write(bool value) - 将一字节的布尔值写入当前流,其中0表示false,1表示true。
- public virtual void Write(byte value) - 将无符号字节写入当前流,并将流位置前进一个字节。
- public virtual void Write(byte[] buffer) - 将字节数组写入基础流。
- public virtual void Write(char ch) - 根据使用的编码和写入到流中的特定字符,将Unicode字符写入当前流,并提高流的当前位置。
- public virtual void Write(char[] chars) - 根据使用的编码和写入到流中的特定字符,将字符数组写入当前流,并前进流的当前位置。
- public virtual void Write(double value) - 将一个八字节的浮点值写入当前流,并将流位置前进八个字节。
- public virtual void Write(int value) - 将四个字节的有符号整数写入当前流,并将流位置前移四个字节。
- public virtual void Write(string value) - 以BinaryWriter的当前编码方式向该流中写入一个带前缀的字符串,并根据所使用的编码和要写入该流中的特定字符来推进流的当前位置。
using System;
using System.IO;
namespace BinaryFileApplication {
class Program {
static void Main(string[] args) {
BinaryWriter bw;
BinaryReader br;
int i = 25;
double d = 3.14157;
bool b = true;
string s = "I am happy";
//create the file
try {
bw = new BinaryWriter(new FileStream("mydata", FileMode.Create));
} catch (IOException e) {
Console.WriteLine(e.Message + "\n Cannot create file.");
return;
}
//writing into the file
try {
bw.Write(i);
bw.Write(d);
bw.Write(b);
bw.Write(s);
} catch (IOException e) {
Console.WriteLine(e.Message + "\n Cannot write to file.");
return;
}
bw.Close();
//reading from the file
try {
br = new BinaryReader(new FileStream("mydata", FileMode.Open));
} catch (IOException e) {
Console.WriteLine(e.Message + "\n Cannot open file.");
return;
}
try {
i = br.ReadInt32();
Console.WriteLine("Integer data: {0}", i);
d = br.ReadDouble();
Console.WriteLine("Double data: {0}", d);
b = br.ReadBoolean();
Console.WriteLine("Boolean data: {0}", b);
s = br.ReadString();
Console.WriteLine("String data: {0}", s);
} catch (IOException e) {
Console.WriteLine(e.Message + "\n Cannot read from file.");
return;
}
br.Close();
Console.ReadKey();
}
}
}
操纵Windows文件系统 - 它使C# 程序员能够浏览和定位Windows文件和目录。
using System;
using System.IO;
namespace WindowsFileApplication {
class Program {
static void Main(string[] args) {
//creating a DirectoryInfo object
DirectoryInfo mydir = new DirectoryInfo(@"c:\Windows");
// getting the files in the directory, their names and size
FileInfo [] f = mydir.GetFiles();
foreach (FileInfo file in f) {
Console.WriteLine("File Name: {0} Size: {1}", file.Name, file.Length);
}
Console.ReadKey();
}
}
}