X-Git-Url: http://nitlanguage.org diff --git a/lib/standard/file.nit b/lib/standard/file.nit index 8af3c70..956d72f 100644 --- a/lib/standard/file.nit +++ b/lib/standard/file.nit @@ -42,7 +42,17 @@ abstract class FileStream private var file: nullable NativeFile = null # The status of a file. see POSIX stat(2). - fun file_stat: NativeFileStat do return _file.file_stat + # + # var f = new FileReader.open("/etc/issue") + # assert f.file_stat.is_file + # + # Return null in case of error + fun file_stat: nullable FileStat + do + var stat = _file.file_stat + if stat.address_is_null then return null + return new FileStat(stat) + end # File descriptor of this file fun fd: Int do return _file.fileno @@ -330,6 +340,10 @@ class Path # # Returns `null` if there is no file at `self`. # + # assert "/etc/".to_path.stat.is_dir + # assert "/etc/issue".to_path.stat.is_file + # assert "/fail/does not/exist".to_path.stat == null + # # ~~~ # var p = "/tmp/".to_path # var stat = p.stat @@ -523,6 +537,11 @@ class FileStat return stat.atime end + # Returns the last access time + # + # alias for `last_access_time` + fun atime: Int do return last_access_time + # Returns the last modification time in seconds since Epoch fun last_modification_time: Int do @@ -530,6 +549,12 @@ class FileStat return stat.mtime end + # Returns the last modification time + # + # alias for `last_modification_time` + fun mtime: Int do return last_modification_time + + # Size of the file at `path` fun size: Int do @@ -537,13 +562,16 @@ class FileStat return stat.size end - # Is this a regular file and not a device file, pipe, socket, etc.? + # Is self a regular file and not a device file, pipe, socket, etc.? fun is_file: Bool do assert not finalized return stat.is_reg end + # Alias for `is_file` + fun is_reg: Bool do return is_file + # Is this a directory? fun is_dir: Bool do @@ -567,6 +595,11 @@ class FileStat return stat.ctime end + # Returns the last status change time + # + # alias for `last_status_change_time` + fun ctime: Int do return last_status_change_time + # Returns the permission bits of file fun mode: Int do @@ -613,10 +646,20 @@ redef class String fun file_exists: Bool do return to_cstring.file_exists # The status of a file. see POSIX stat(2). - fun file_stat: NativeFileStat do return to_cstring.file_stat + fun file_stat: nullable FileStat + do + var stat = to_cstring.file_stat + if stat.address_is_null then return null + return new FileStat(stat) + end # The status of a file or of a symlink. see POSIX lstat(2). - fun file_lstat: NativeFileStat do return to_cstring.file_lstat + fun file_lstat: nullable FileStat + do + var stat = to_cstring.file_lstat + if stat.address_is_null then return null + return new FileStat(stat) + end # Remove a file, return true if success fun file_delete: Bool do return to_cstring.file_delete @@ -973,7 +1016,7 @@ redef class NativeString end # This class is system dependent ... must reify the vfs -extern class NativeFileStat `{ struct stat * `} +private extern class NativeFileStat `{ struct stat * `} # Returns the permission bits of file fun mode: Int is extern "file_FileStat_FileStat_mode_0" # Returns the last access time @@ -1117,30 +1160,30 @@ redef class Sys end # Print `objects` on the standard output (`stdout`). -protected fun printn(objects: Object...) +fun printn(objects: Object...) do sys.stdout.write(objects.to_s) end # Print an `object` on the standard output (`stdout`) and add a newline. -protected fun print(object: Object) +fun print(object: Object) do sys.stdout.write(object.to_s) sys.stdout.write("\n") end # Read a character from the standard input (`stdin`). -protected fun getc: Char +fun getc: Char do return sys.stdin.read_char.ascii end # Read a line from the standard input (`stdin`). -protected fun gets: String +fun gets: String do return sys.stdin.read_line end # Return the working (current) directory -protected fun getcwd: String do return file_getcwd.to_s +fun getcwd: String do return file_getcwd.to_s private fun file_getcwd: NativeString is extern "string_NativeString_NativeString_file_getcwd_0"