Class: File
- Inherits:
-
Object
- Object
- File
- Defined in:
- lib/rd2odt/compat/ruby-1.9.x/ftools.rb
Overview
ftools.rb: Extra tools for the File class
- Author
-
WATANABE, Hirofumi
- Documentation
-
Zachary Landau
This library can be distributed under the terms of the Ruby license. You can freely distribute/modify this library.
It is included in the Ruby standard library.
Description
ftools adds several (class, not instance) methods to the File class, for copying, moving, deleting, installing, and comparing files, as well as creating a directory path. See the File class for details.
FileUtils contains all or nearly all the same functionality and more, and is a recommended option over ftools
When you
require 'ftools'
then the File class aquires some utility methods for copying, moving, and deleting files, and more.
See the method descriptions below, and consider using FileUtils as it is more comprehensive.
Constant Summary collapse
- BUFSIZE =
8 * 1024
Class Method Summary collapse
-
.catname(from, to) ⇒ Object
If
to
is a valid directory,from
will be appended toto
, adding and escaping backslashes as necessary. -
.chmod(mode, *files) ⇒ Object
Changes permission bits on
files
to the bit pattern represented bymode
. -
.compare(from, to, verbose = false) ⇒ Object
(also: cmp)
Returns
true
if and only if the contents of filesfrom
andto
are identical. -
.copy(from, to, verbose = false) ⇒ Object
(also: cp)
Copies a file
from
toto
using #syscopy. -
.install(from, to, mode = nil, verbose = false) ⇒ Object
If
src
is not the same asdest
, copies it and changes the permission mode tomode
. -
.makedirs(*dirs) ⇒ Object
(also: mkpath)
Creates a directory and all its parent directories.
-
.move(from, to, verbose = false) ⇒ Object
(also: mv)
Moves a file
from
toto
using #syscopy. - .o_chmod ⇒ Object
-
.safe_unlink(*files) ⇒ Object
(also: rm_f)
Removes a list of files.
-
.syscopy(from, to) ⇒ Object
Copies a file
from
toto
.
Class Method Details
.catname(from, to) ⇒ Object
If to
is a valid directory, from
will be appended to to
, adding and escaping backslashes as necessary. Otherwise, to
will be returned. Useful for appending from
to to
only if the filename was not specified in to
.
44 45 46 47 48 49 50 |
# File 'lib/rd2odt/compat/ruby-1.9.x/ftools.rb', line 44 def catname(from, to) if directory? to join to.sub(%r([/\\]$), ''), basename(from) else to end end |
.chmod(mode, *files) ⇒ Object
237 238 239 240 241 |
# File 'lib/rd2odt/compat/ruby-1.9.x/ftools.rb', line 237 def chmod(mode, *files) verbose = if files[-1].is_a? String then false else files.pop end $stderr.printf "chmod %04o %s\n", mode, files.join(" ") if verbose o_chmod mode, *files end |
.compare(from, to, verbose = false) ⇒ Object Also known as: cmp
Returns true
if and only if the contents of files from
and to
are identical. If verbose
is true
, from <=> to
is printed.
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
# File 'lib/rd2odt/compat/ruby-1.9.x/ftools.rb', line 130 def compare(from, to, verbose = false) $stderr.print from, " <=> ", to, "\n" if verbose return false if stat(from).size != stat(to).size from = open(from, "rb") to = open(to, "rb") ret = false fr = tr = '' begin while fr == tr fr = from.read(BUFSIZE) if fr tr = to.read(fr.size) else ret = to.read(BUFSIZE) ret = !ret || ret.length == 0 break end end rescue ret = false ensure to.close from.close end ret end |
.copy(from, to, verbose = false) ⇒ Object Also known as: cp
Copies a file from
to to
using #syscopy. If to
is a directory, copies from
to to/from
. If verbose
is true, from -> to
is printed.
87 88 89 90 |
# File 'lib/rd2odt/compat/ruby-1.9.x/ftools.rb', line 87 def copy(from, to, verbose = false) $stderr.print from, " -> ", catname(from, to), "\n" if verbose syscopy from, to end |
.install(from, to, mode = nil, verbose = false) ⇒ Object
If src
is not the same as dest
, copies it and changes the permission mode to mode
. If dest
is a directory, destination is dest/src
. If mode
is not set, default is used. If verbose
is set to true, the name of each file copied will be printed.
250 251 252 253 254 255 256 257 |
# File 'lib/rd2odt/compat/ruby-1.9.x/ftools.rb', line 250 def install(from, to, mode = nil, verbose = false) to = catname(from, to) unless exist? to and cmp from, to safe_unlink to if exist? to cp from, to, verbose chmod mode, to, verbose if mode end end |
.makedirs(*dirs) ⇒ Object Also known as: mkpath
Creates a directory and all its parent directories. For example,
File.makedirs ‘/usr/lib/ruby’
causes the following directories to be made, if they do not exist.
-
/usr
-
/usr/lib
-
/usr/lib/ruby
You can pass several directories, each as a parameter. If the last parameter isn’t a String, verbose mode will be enabled.
205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 |
# File 'lib/rd2odt/compat/ruby-1.9.x/ftools.rb', line 205 def makedirs(*dirs) verbose = if dirs[-1].is_a? String then false else dirs.pop end mode = 0755 for dir in dirs parent = dirname(dir) next if parent == dir or directory? dir makedirs parent unless directory? parent $stderr.print "mkdir ", dir, "\n" if verbose if basename(dir) != "" begin Dir.mkdir dir, mode rescue SystemCallError raise unless directory? dir end end end end |
.move(from, to, verbose = false) ⇒ Object Also known as: mv
Moves a file from
to to
using #syscopy. If to
is a directory, copies from from
to to/from
. If verbose
is true, from -> to
is printed.
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/rd2odt/compat/ruby-1.9.x/ftools.rb', line 99 def move(from, to, verbose = false) to = catname(from, to) $stderr.print from, " -> ", to, "\n" if verbose if RUBY_PLATFORM =~ /djgpp|(cyg|ms|bcc)win|mingw/ and file? to unlink to end fstat = stat(from) begin rename from, to rescue begin symlink readlink(from), to and unlink from rescue from_stat = stat(from) syscopy from, to and unlink from utime(from_stat.atime, from_stat.mtime, to) begin chown(fstat.uid, fstat.gid, to) rescue end end end end |
.o_chmod ⇒ Object
225 |
# File 'lib/rd2odt/compat/ruby-1.9.x/ftools.rb', line 225 alias o_chmod chmod |
.safe_unlink(*files) ⇒ Object Also known as: rm_f
Removes a list of files. Each parameter should be the name of the file to delete. If the last parameter isn’t a String, verbose mode will be enabled. Returns the number of files deleted.
168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 |
# File 'lib/rd2odt/compat/ruby-1.9.x/ftools.rb', line 168 def safe_unlink(*files) verbose = if files[-1].is_a? String then false else files.pop end files.each do |file| begin unlink file $stderr.print "removing ", file, "\n" if verbose rescue Errno::EACCES # for Windows continue if symlink? file begin mode = stat(file).mode o_chmod mode | 0200, file unlink file $stderr.print "removing ", file, "\n" if verbose rescue o_chmod mode, file rescue nil end rescue end end end |
.syscopy(from, to) ⇒ Object
Copies a file from
to to
. If to
is a directory, copies from
to to/from
.
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/rd2odt/compat/ruby-1.9.x/ftools.rb', line 56 def syscopy(from, to) to = catname(from, to) fmode = stat(from).mode tpath = to not_exist = !exist?(tpath) from = open(from, "rb") to = open(to, "wb") begin while true to.syswrite from.sysread(BUFSIZE) end rescue EOFError ret = true rescue ret = false ensure to.close from.close end chmod(fmode, tpath) if not_exist ret end |