大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> NET专区 -> 使用 .NET的IO(1) Paul_Ni(原作)

使用 .NET的IO(1) Paul_Ni(原作)

时间: 2021-07-31 作者:daque

system.io 定名空间包括承诺在数据流和文献长进行同步和异步读取及写入的典型。以次的辨别无助于于廓清文献和流的分别。文献是少许具备长久保存及一定程序的字节构成的一个无序的、具备称呼的汇合。所以,对于文献,人们常会想到目次路途、磁盘保存、文献和目次名等上面。差异,流供给一种向后备保存器写入字节和从后备保存器读取字节的办法,后备保存器不妨为多种保存媒体之一。正如除磁盘外生存多种后备保存器一律,除文献流除外也生存多种流。比方,还生存搜集流、外存流和磁带流等。基础的文献 i/o

笼统基类 stream 扶助读取和写入字节。stream 集成了异步扶助。其默许实行按照其相映的异步本领来设置同步读取和写入,反之亦然。一切表白流的类都是从 stream 类接受的。stream 类及其派生类供给数据源和积聚库的普遍视图,使步调员不用领会操纵体例和普通摆设的简直详细。流波及三个基础操纵:

不妨从流读取。读取是从流到数据构造(如字节数组)的数据传输。

不妨向流写入。写入是从数据构造到流的数据传输。

流不妨扶助搜索。搜索是对流内的暂时场所举行查问和窜改。

按照普通数据源或积聚库,流大概只扶助那些功效中的一局部。比方,networkstreams 不扶助搜索。stream 的 canread、canwrite 和 canseek 属性及其派生类确定各别的流所扶助的操纵。从 system.object 派生的 i/o 类

binaryreader 和 binarywriter 从 streams 读取或向 streams 写入源代码的字符串和基元数据典型。file 供给用来创造、复制、简略、挪动和翻开文献的静态本领,并扶助创造 filestream 东西。fileinfo 类供给范例本领。directory 供给经过目次和子目次举行创造、挪动和列举的静态本领。directoryinfo 类供给范例本领。path 供给以跨平台的办法处置目次字符串的本领和属性。file、path 和 directory 是密封(在 microsoft visual basic 中为 notinheritable)类。不妨创造那些类的新范例,但它们不妨没有派生类。system.io.filesysteminfo 及其派生类

filesysteminfo 是 fileinfo 和 directoryinfo 东西的笼统基类。fileinfo 供给用来创造、复制、简略、挪动和翻开文献的范例本领,并扶助创造 filestream 东西。file 类供给静态本领。directoryinfo 供给经过目次和子目次举行创造、挪动和列举的范例本领。directory 类供给静态本领。fileinfo 和directoryinfo 是密封(在 microsoft visual basic 中为 notinheritable)类。不妨创造那些类的新范例,但它们不妨没有派生类。从 system.io.stream 派生的类

filestream 扶助经过其 seek 本领随机考察文献。默许情景下,filestream 以同步办法翻开文献,但它也扶助异步操纵。file 包括静态本领,而 fileinfo 包括范例本领。memorystream 是一个非缓冲的流,不妨在外存市直接考察它的封装数据。该流没有后备保存器,可用作偶尔缓冲区。networkstream 表白搜集贯穿上的 stream。固然 networkstream 是从 stream 派生的,但它不是 system.io 定名空间的一局部,而是在 system.net.sockets 定名空间中。cryptostream 将数据流链接到加密变换。固然 cryptostream 是从 stream 派生的,但它不是 system.io 定名空间的一局部,而是在 system.security.cryptography 定名空间中。bufferedstream 是向另一个 stream(比方 networkstream)增添缓冲的 stream。(filestream 里面已具备缓冲,memorystream 不须要缓冲)。bufferedstream 东西不妨环绕某些典型的流来形成以普及读写本能。缓冲区是外存中的字节块,用来缓存数据,进而缩小对操纵体例的挪用度数。system.io.textreader 及其派生类

textreader 是 streamreader 和 stringreader 东西的笼统基类。笼统 stream 类的实行用来字节输出和输入,而 textreader 的实行用来 unicode 字符输入。streamreader 经过运用 encoding 举行字符和字节的变换,从 streams 中读取字符。streamreader 具备一个结构因变量,该结构因变量按照能否生存专用来 encoding 的 preamble(比方一个字节程序标志)来试验决定给定 stream 的精确 encoding 是什么。stringreader 从 strings 中读取字符。stringreader 承诺您用沟通的 api 来处置 strings,所以您的输入不妨是 string 或以任何源代码表白的 stream。system.io.textwriter 及其派生类

textwriter 是 streamwriter 和 stringwriter 东西的笼统基类。笼统 stream 类的实行用来字节输出和输入,而 textwriter 的实行用来 unicode 字符输入。streamwriter 经过运用 encoding 将字符变换为字节,向 streams 写入字符。stringwriter 向 strings 写入字符。stringwriter 承诺您用沟通的 api 来处置 strings,如许您的输入不妨是 string 或以任何源代码表白的 stream。列举数

fileaccess、filemode 和 fileshare 列举设置某些 filestream 和 isolatedstoragefilestream 结构因变量及某些 file.open 重载本领运用的常数。那些常数感化创造、翻开和共享普通文献的办法。seekorigin 列举数设置用来指定随机考察文献进口点的常数。那些常数和字节偏移量一道运用。i/o 和安定性

当在 system.io 定名空间中运用类时,要使考察被承诺,则必需满意诸如考察遏制列表 (acl) 等操纵体例安定性诉求。该诉求是在一切 fileiopermission 诉求除外的诉求。劝告 internet 和 intranet 的默许安定战略不承诺考察文献。所以,即使您在编写将经过 internet 载入的代码,则不要运用“regular”(即非分隔保存)io 类。请改用独力保存。劝告 当文献或搜集流翻开时,惟有在结构流时才实行安定查看。所以,当将那些流散发给受信度较低的代码或运用步调域时,请特殊提防。创造目次列表

底下的代码示例表露了怎样运用 io 类来创造目次列表。 [c#]

using system;

using system.io;

class directorylister

{

 public static void main(string[] args)

 {

directoryinfo dir = new directoryinfo(".");

foreach (fileinfo f in dir.getfiles("*.cs"))

{

 string name = f.fullname;

 long size = f.length;

 datetime creationtime = f.creationtime;

 console.writeline("{0,-12:n0} {1,-20:g} {2}", size,

creationtime, name);

}

 }

}

在本示例中,directoryinfo 东西是暂时目次,用 (".") 表白,代码列出了暂时目次中具备 .cs 扩充名的一切文献,同声还列出了那些文献的巨细、创造功夫和称呼。假如 c:\mydir 的 \bin 子目次中生存多个 .cs 文献,该代码的输入大概如次所示:9537/20/2000 10:42 am c:\mydir\bin\paramatt.cs

6647/27/2000 3:11 pmc:\mydir\bin\tst.cs

4038/8/2000 10:25 amc:\mydir\bin\dirlist.cs

即使您要另一个目次中文献的列表,比方 c:\ root 目次,请记着运用反斜杠 (\) 转义符,如“c:\\”中的反斜杠。您也不妨运用 unix 款式的斜杠,如“c:/”中的斜杠。对刚创造的数据文献举行读取和写入

binarywriter 和 binaryreader 类用来读取和写入数据,而不是字符串。底下的代码示例演示了向新的、空文献流 (test.data) 写入数据及从该文献读取数据。在暂时目次中创造了数据文献之后,也就同声创造了关系的 binarywriter 和 binaryreader,binarywriter 用来向 test.data 写入平头 0 到 10,test.data 在文献尾留住了一个文献南针。在将文献南针树立回初始场所后,binaryreader 读出指定的实质。 [c#]

using system;

using system.io;

class mystream {

 private const string file_name = "test.data";

 public static void main(string[] args) {

// create the new, empty data file.

if (file.exists(file_name)) {

 console.writeline("{0} already exists!", file_name);

 return;

}

filestream fs = new filestream(file_name, filemode.createnew);

// create the writer for data.

binarywriter w = new binarywriter(fs);

// write data to test.data.

for (int i = 0; i < 11; i++) {

 w.write( (int) i);

}

w.close();

fs.close();

// create the reader for data.

fs = new filestream(file_name, filemode.open, fileaccess.read);

binaryreader r = new binaryreader(fs);

// read data from test.data.

for (int i = 0; i < 11; i++) {

 console.writeline(r.readint32());

 w.close();

}

 }

}

即使 test.data 已生存于暂时目次中,则激励一个 ioexception。一直运用 filemode.create 创造新文献,而不激励 ioexception。翻开并附加到日记文献

streamwriter 和 streamreader 向流写入字符并从流读取字符。底下的代码示例翻开 log.txt 文献(即使文献不生存则创造文献)以举行输出,并将消息附加到文献尾。而后将文献的实质写入规范输入,再不表露出来。 [c#]

using system;

using system.io;

class dirappend

{

 public static void main(string[] args)

 {

streamwriter w = file.appendtext("log.txt");

log ("test1", w);

log ("test2", w);

// close the writer and underlying file.

w.close();

// open and read the file.

streamreader r = file.opentext("log.txt");

dumplog (r);

 }

 public static void log (string logmessage, textwriter w)

 {

w.write("\r\nlog entry : ");

w.writeline("{0} {1}", datetime.now.tolongtimestring(),

 datetime.now.tolongdatestring());

w.writeline(":");

w.writeline(":{0}", logmessage);

w.writeline ("-------------------------------");

// update the underlying file.

w.flush();

 }

 public static void dumplog (streamreader r)

 {

// while not at the end of the file, read and write lines.

string line;

while ((line=r.readline())!=null)

{

 console.writeline(line);

}

r.close();

 }

}

从文献读取文本

底下的代码示例读取所有文献,并在检验和测定到文献尾时发出报告。 [c#]

using system;

using system.io;

public class textfromfile {

 private const string file_name = "myfile.txt";

 public static void main(string[] args) {

if (!file.exists(file_name)) {

 console.writeline("{0} does not exist!", file_name);

 return;

}

streamreader sr = file.opentext(file_name);

string input;

while ((input=sr.readline())!=null) {

 console.writeline(input);

}

console.writeline ("the end of the stream has been reached.");

 sr.close();

 }

}

此代码经过挪用 file.opentext 创造一个指向 myfile.txt 的 streamreader。streamreader.readline 将每一条龙都归来为一个字符串。当没有要读取的字符时,一条动静表露该情景,而后流封闭。向文献写入文本

底下的代码示例创造一个新文本文献并向其写入一个字符串。 [c#]

using system;

using system.io;

public class texttofile {

 private const string file_name = "myfile.txt";

 public static void main(string[] args) {

if (file.exists(file_name)) {

 console.writeline("{0} already exists!", file_name);

 return;

}

streamwriter sr = file.createtext(file_name);

sr.writeline ("this is my file.");

sr.writeline ("i can write ints {0} or floats {1}, and so on.",

 1, 4.2);

sr.close();

 }

}

从字符串中读取字符

底下的代码示例承诺您在现有字符串中从指定的场所发端读取确定数手段字符。运用 stringreader 实行此操纵,如次所示。代码设置字符串并将其变换为字符数组,而后,不妨运用符合的 stringreader.read 本领按须要读取该字符数组。 [c#]

using system;

using system.io;

public class charsfromstr

{

 public static void main(string[] args)

 {

 // create a string to read characters from.

 string str = "some number of characters";

 // size the array to hold all the characters of the string,

 // so that they are all accessible.

 char[] b = new char[24];

 // create a stringreader and attach it to the string.

 stringreader sr = new stringreader(str);

 // read 13 characters from the array that holds the string, starting

 // from the first array member.

 sr.read(b, 0, 13);

 // display the output.

 console.writeline(b);

 // close the stringreader.

sr.close();

 }

}

本示例只从字符串中读取指定命手段字符,如次所示。some number o

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.