C#之I/O系统(五)

来源:互联网 发布:淘宝哪家银店真的吗 编辑:程序博客网 时间:2024/05/17 07:32

接着上面介绍的,在对文件进行读写操作时,我们还可以重定向标准的数据流。重定向运算符“<”和“>”是由操作系统提供的,因此如果操作系统支持I/O重定向,则可以重定向标准的输入输出,而不必更改程序。另外,Console类也为我们提供了三个重定向的方法,它们分别是Console.SetIn,Console.SetOut,Console.SetError,它们的函数定义如下:

static void SetIn(TextReader newIn);

static void SetOut(TextWriter newOut);

static void SetError(TextWriter newError);

例如:

StreamWriter log_out=new StreamWriter("log.txt");

Console.SetOut(log_out);

Console.WriteLine("This is the start of log file");

这时候,我们就会发现,输出并不是显示在控制台上的,而是输出到我们指定的log.txt文本文件中了。

到目前为止,我们不管是基于字符还是基于字节读取文件,都是按顺序进行存取的,但是,C#中提供给了我们随机读取文件的方法。在FileStream类中,定义了Seek()方法,函数的原型如下:

long Seek(long offset,SeekOrigin origin);

其中offset是指在origin指定位置后的offset个字节,SeekOrigin是个枚举类型,其值及对应的含义如下:

SeekOrifin枚举值含义SeekOrigin.Begin在文件的开始位置开始查找SeekOrigin.Current从文件当前位置开始查找SeekOrigin.End从文件的末尾开始查找






如果在查找的过程中出错,就会抛出IOException异常,如果底层的数据流不支持位置查找,则会抛出NotSupportedException异常。

除了上面介绍的定位方法外,我们还可以使用流类的Position属性,Position属性是一个读写属性,既可以获得当前位置,也可以更改当前位置。

上面我们介绍了两种实现TextReader和TextWriter类的基于字符的数据流StreamReader和StreamWriter,接下来我们讲述一下另外的两种数据流。

在执行基于内存的I/O操作时,使用字符串要比使用字节数组作为底层存储要简单的多,这时候我们可以使用StringReader和StringWriter类。StringReader继承了TextReader类,StringWriter继承了TextWriter类,它们可以使用基类定义的方法。

StringReader类的构造函数如下:

StringReader(string s);

s是要初始化的字符串。

StringWriter类的构造函数:

StringWriter();

StringWriter(StringBuilder sb);

StringWriter(IFormatProvider formatprovider);

StringWriter(StringBuilder sb,IFormatProvider formatprovider);

第一种构造函数创建一个空的StringWriter对象,第二种以一个StringBuilder对象初始化一个StringWriter对象。

最后需要提醒大家的是:除了上面所述的各种读取文件的方法外,File类还提供了很多的文件操作的静态方法,包含文件的创建,复制,移动,删除,加密,解密,设置和修改文件访问时间等等,这些方法操作起来更加简单。

原创粉丝点击