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)。