tango.io.Path( r4774)
License:
BSD style: see license.txt
Version:
Mar 2008: Initial version
Author:
Kris
比FilePath更直接到达文件系统。如果你不需要路径的编辑特性就使用它。例如,你只想检查某些路径是否存在,使用这个模块也许比FilePath更方便。例如:
1 2 | if (exists ("some/file/path")) ... |
这些函数也许比FilePath效率更小,因为他们通常为每次底层操作系统调用附加一个空指针(null)。当你需要徒步访问文件系统,并且不操作路径的部件时,使用Path。如果希望得到路径的编辑和改变特征就用FilePath。
我们鼓励使用“范围导入”使用这个模块中,例如:
1 2 3 4 | import Path = tango.io.Path; if (Path.exists ("some/file/path")) ... |
也可以在这里放一个轻量级的路径解析器,把文件路径分离成它们的组成成分。看看下面的路径解析器(PathParser):
1 2 3 4 5 6 | auto p = Path.parse ("some/file/path"); auto path = p.path; auto name = p.name; auto suffix = p.suffix; ... ... |
编译时带上 -version=Win32SansUnicode参数获得 Win95 & Win32s 的文件支持。
用一个D API包装操作系统特有调用。值得注意的是它们接受一个null(仅在终止字符串),这就是为什么它不是公共的。我们需要首先做这个声明以避免前向引用问题。
最后修改时间。
文件扫描期间传递来的文件信息。
-
struct Listing ¶#
- Some fruct glue for directory listings void exception(char[] filename) [static] ¶#
使用最后已知错误抛出一个异常。
void exception(char[] prefix, char[] error) [static] ¶#
抛出IO 异常。
返回一个调整为总是有一个结尾分隔符非空实例的路径。
返回一个调整为没有结尾分隔符的非空实例的路径。
把一些路径细则合并到一起。一个路径分隔符会潜在地插入到每个部分之间。
可能的话廉价地附加一个终止null到一个字符串。
-
wchar[] toString16(wchar[] tmp, char[] path) [private, static] ¶#
返回一个该路径的wchar[] 实例。
返回一个该路径的char[] 实例。
获取这个路径有关这个路径的信息。
获取有关这个路径的信息。
为这个路径取得一个标志。
返回文件长度(用字节)。
-
bool isWritable(char[] name) [static] ¶#
这个文件是否可写?
判断它实际上是不是一个文件夹/目录?
是否是一个正常文件?
-
Stamps timeStamps(char[] name) [static] ¶#
返回时间戳信息。
时间戳用文件系统指示的格式返回。如NTFS保持UTC时间,而FAT时间戳是基于本地时间。
传递另一个文件的内容到这个文件中。成功时返回到这个类的引用 ,失败则抛出一个IOException。
从文件系统中稳除文件/目录。
改变一个文件/目录的名称或位置,并采用提供的路径。
-
void createFile(char[] name) [static] ¶#
创建一个新文件。
-
void createFolder(char[] name) [static] ¶#
创建一个新文件夹。
列举在这个文件夹中的文件名集合。
每个路径和文件名被传递到提供的委托,和前置路径一起并且不管入口是否是一个文件夹。
返回扫描到的文件数目。
解析文件路径。
文件路径包含非ansi字符应该是utf-8编码。以这种方式来支持Unicode相信比提供wchar版本的路径解析器(PathParser)更合适,并且与Uri类看起来一致和相兼容。
注:毗连的'.'分隔符形式被看作特殊的,用在把它们赋给没有明显后缀的名称时。此外,一个在名称开头的'.'预示它不是一个后缀,例如".file"是一个名称不是一个后缀。中间'.'字符的形式属于后缀,如"file....suffix"包含后缀自身的点操作符'.'。看看没有点操作符后缀的方法ext()。
也要注意路径分隔符的正规化没有默认发生。这就意味着 '\'的用法要显式地预先转换为 '/'(在'\'出现的情形会抛出一个异常)。在运行中(On-the-fly )转换被避免,因为提供的路径被认为不可变并且我们避免制造一个原始路径的副本。模块FilePath在一个更高层次上存在,没有这样的限制。
解析路径细则。
复制这个路径。
返回这个文件路径的完整文字。
返回这个路径的根。根是形如“C:”的结构。
返回文件路径。路径可以用"/"开始和结束。根路径是"/"且未指定的路径返回一个空字符串。目录路径可以被分隔,目录名放'name'成员中;目录名被看作与文件路径不同。
返回一个表示这当前的上一级的路径。如果名字部分为空的特殊情况下,这将典型地返回当前路径部分。在这样的情况下,路径扫描前面的部分:
-
1 2
normal: /x/y/z => /x/y special: /x/y/ => /x
注意,这会返回一个适合于分离成路径和名字部分的路径(没有尾部分隔符)。
返回这个文件或目录的名字。
扩展名(ext)是文件名的尾部,最右边'.'分隔符的右边,如路径"foo.bar"的扩展名(ext)是"bar"。注意相邻两个分隔符的形式被特殊看待,例如".."会以没有扩展名( ext)而结束。
后缀(suffix)很象扩展名(ext),但包含分隔符,如路径"foo.bar"的后缀是".bar"。
返回根(root) +文件夹( folder)的组合。
返回名字(name) +后缀( suffix)的组合。
-
bool isAbsolute() ¶#
如果这个路径与当前工作目录不相对应就返回true 。
如果文件路径为空就返回true。
-
bool isChild() ¶#
- 如果这个路径有上一级(父)就返回 true 。需要指出的是 ,“ 上一级”(父)由在路径中有路径分隔符出现来定义。这就意味在 "/foo" 中的 'foo' 是根的下一级(子)。 int opEquals(char[] s) ¶#
- 判断这个路径与给定的文字是否相等吗 ? PathParser parse(char[] path, size_t end) [package] ¶#
- 分析路径细则和明确的终点。一个路径中的 ' \ '被认为是非法的。
抛出:
在系统错误时抛出IOException。
- 如果一个部分以一个文件形式存在而不是文件夹形式存在时抛出 IllegalArgumentException (非法参数异常)。 void rename(char[] src, char[] dst) ¶#
- 改变一个文件 /目录的名称或位置。 void copy(char[] src, char[] dst) ¶#
- 转移一个文件的内容到另一个中。失败时抛出 IOException ( IO异常)。 FS.Listing children(char[] path) ¶#
- 通过一个 fruct提供 foreach支持。
-
1 2
foreach (info; children("myfolder")) ...
- 每个路径与文件名被传递到 foreach委托,和路径前缀一起而不管入口是不是一个文件夹。信息结构( info construct)揭示了下面的特征:
-
1 2 3 4
char[] path char[] name ulong bytes bool folder
char[] join(char[][] paths...) ¶#
- 把一系列路径细则结合到一起。一个路径分隔符被潜在地插入到每个部分之间。 char[] standard(char[] path) ¶#
- 转换路径分隔符到标准格式,使用 '/' 作为路径分隔符。这将与 Uri和所用 Tango支持的当代操作系统兼容。已知的异常是 Windows命令行处理器,它把 '/'字符当作开关。使用