tango.io.device.File 翻译

tango.io.device.File (r4796)

License:

BSD style: see license.txt

Version:

Mar 2004: Initial release Dec 2006: Outback release Nov 2008: relocated and simplified

Author:

Kris, John Reimer, Anders F Bjorklund (Darwin patches), Chris Sauls (Win95 file support)

class File : Device, Device.Seek #
实现读写一个普通文件的手段。 conduits(管道)是访问外部数据的初级手段, File(文件)通过提供文件特有的方法扩展了基本模式,可以设置文件大小、搜索特定文件位置等等。串行( Serial)输入输出是直接的( straightforward)。在这个例子中,我们直接拷贝一个文件到控制台:
1
2
3
4
5
// 打开一个文件用于读
auto from = new File ("test.txt");

//直接流到控制台 
Stdout.copy (from);
这里,我们复制一个文件到另一个:
1
2
3
4
5
6
7
8
9
// 打开一个文件用于读。
auto from = new File ("test.txt");

// 打开另一个文件用于写。
auto to = new File ("copy.txt", File.WriteCreate);

// 复制文件并关闭。
to.copy.close;
from.close;
你可以用 InputStream.load()直接载入一个文件到内存:
1
2
3
auto file = new File ("test.txt");
auto content = file.load;
file.close;

或用File中的一个方便的静态函数:

1
auto content = File.get ("test.txt");

得到类似结果的一个更明确的版本:

1
2
3
4
5
6
7
8
9
// 打开一个文件用于读。
auto file = new File ("test.txt");

//创建一个数组容纳整个文件。 
auto content = new char [file.length];

//读取文件内容。返回值是读取的字节数。 
auto bytes = file.read (content);
file.close;

相反,我们可以直接写内容到一个文件中:

1
2
3
4
5
//打开一个用于写的文件。
auto to = new File ("text.txt", File.WriteCreate);

//写一个内容的数组到这个文件中。 
auto bytes = to.write (content);

有等价的静态函数, File.set()File.append(),分别设置和添加文件内容。

文件可以幸福地用随机I/O处理。在这里我们用seek()重新配置(relocate)这个文件指针。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 打开一个文件用于读和写。
auto file = new File ("random.bin", File.ReadWriteCreate);

//写一些数据。 
file.write ("testing");

// 退到文件开始
file.seek (0);

// 再次读回数据。
char[10] tmp;
auto bytes = file.read (tmp);

file.close;

编译时带上 -version=Win32SansUnicode 参数以得到Win95 & Win32s的文件支持。

struct Style #
适合 32...
Access access #
访问权限。
Open open #
怎样打开
Share share #
怎样共享
Cache cache #
如何缓存
enum Access # Read #
是否可读。
Write #
是否可写
ReadWrite #
读写都可以。
enum Open # Exists #
必须存在。
Create #
创建或截短
Sedate #
如果必要的话就创建
Append #
如果必要的话就创建
New #
不能存在。
enum Share # None #
不共享
Read #
共享读
ReadWrite #
对任何情况都可打开。
enum Cache # None #
不优化。
Random #
随机优化。
Stream #
对流优化。
WriteThru #
backing-cache flag后台缓存标志
Style ReadExisting [const] #
读一个已存在的文件。
Style ReadShared [const] #
读一个已存在的文件。
Style WriteExisting [const] #
写一个已存在的文件。不创建。
Style WriteCreate [const] #
在一个干净的文件上写。必要的话创建。
Style WriteAppending [const] #
写到文件末尾。
Style ReadWriteExisting [const] #
读写一个已存在的文件。
Style ReadWriteCreate [const] #
在一个干净的文件上读写。必要的话创建。
Style ReadWriteOpen [const] #
读和写。如果存在的话使用现存文件。
this() #
创建一个文件给 open()用。
this(char[] path, Style style = ReadExisting) #
用提供的路径和类型创建一个文件。
Style style() #
返回这个文件使用的类型。
char[] toString() [override] #
返回这个文件使用的路径。
long position() #
返回当前文件位置。
long length() #
返回这个文件的总长度。
void[] get(char[] path, void[] dst = null) [static] #
返回一个文件内容的方便函数。返回提供输出缓冲器的一个切片,输出缓冲器有足够的容积,如果文件内容很大的话就从堆上分本配。
文件大小通过文件系统的每个 File.length决定,尽管在一些 nix系统上会被误解。一个替换者是用 File.load载入内容直到遇到 Eof(文尾符)。
void set(char[] path, void[] content) [static] #
设置文件内容和长度以反映给定数组的方便函数。
void append(char[] path, void[] content) [static] #
添加内容到一个文件中的方便函数。
bool open(char[] path, Style style, DWORD addattr) [protected] #
需要应用特殊属性的低级打开子集。

返回:失败时返回false

void open(char[] path, Style style = ReadExisting) #
用提供的类型打开一个文件。
size_t read(void[] dst) [override] #
从文件读取一个字节块到提供的数组(典型的属于一个 IBuffer)。
返回读取的字节数,没有进一步数据时返回 Eof(文尾符)。
size_t write(void[] src) [override] #
从提供的数组写一个字节块到文件(典型的属于 IBuffer)。
void truncate() #
设置文件大小到当前找到的位置。要使这个操作成功,文件必须是可写的。
void truncate(long size) #
设置文件大小到指定长度。要使它成功文件必须是可写的。
long seek(long offset, Anchor anchor = Anchor.Begin) [override] #
设置文件找到的位置为从给定锚点( anchor )到特定偏移量( specified offset)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值