Programming Ruby
The Pragmatic Programmer's Guide
class File
Parent:
IO
Version:
1.6
Index:
atime
basename
chmod
chown
ctime
delete
dirname
expand_path
ftype
join
link
lstat
mtime
new
open
readlink
rename
size
split
stat
symlink
truncate
umask
unlink
utime
atime
chmod
chown
ctime
flock
lstat
mtime
path
truncate
A
File is an abstraction of any file object accessible by the
program and is closely associated with class
IO, page
325.
File includes the methods of module
FileTest as class methods, allowing you to write (for example)
File.exist?("foo").
In this section,
permission bits
are a platform-specific set of bits that indicate permissions of a
file. On Unix-based systems, permissions are viewed as a set of
three octets, for the owner, the group, and the rest of the world. For
each of these entities, permissions may be set to read, write, or
execute (or search, if a directory) the file:
Owner
Group
Other
r
w
x
r
w
x
r
w
x
4
2
1
4
2
1
4
2
1
The permission bits
0644 (in octal) would thus be interpreted as
read/write for owner, and read-only for group and other. Higher-order bits
may also be used to indicate the type of file (plain, directory,
pipe, socket, and so on) and various other special features.
On non-Posix operating systems, there may be only the ability to make a
file read-only or not. In this case, the remaining permission bits
will be synthesized to resemble typical values. For instance, on
Windows NT the default permission bits are
0644, which means
read/write for owner, read-only for all others. The only change
that can be made is to make the file read-only, which is reported as
0444.
mixins
FileTest:
blockdev?, chardev?, directory?, executable?, executable_real?,
exist?, exists?, file?, grpowned?, owned?, pipe?, readable?,
readable_real?, setgid?, setuid?, size, size?, socket?, sticky?,
symlink?, writable?, writable_real?, zero?
Path separator constants (platform-specific)
ALT_SEPARATOR
Alternate path separator.
PATH_SEPARATOR
Character that separates filenames in
a search path (such as ``:'' or ``;'').
SEPARATOR
Character that separates directory
components in a filename (such as ``\'' or ``/'').
Separator
Alias for SEPARATOR.
Open-mode constants
APPEND
Open the file in append mode; all writes will occur at
end of file.
CREAT
Create the file on open if it does not exist.
EXCL
When used with CREAT, open will fail if the file exists.
NOCTTY
When opening a terminal device (see
IO#isatty
on page 331), do not allow it to
become the controlling terminal.
NONBLOCK
Open the file in nonblocking mode.
RDONLY
Open for reading only.
RDWR
Open for reading and writing.
TRUNC
Open the file and truncate it to zero length
if the file exists.
WRONLY
Open for writing only.
class methods
atime
File.atime(
fileName )
->
aTime
Returns the last access time for the named file.
File.atime("testfile")
サ
Sun Jun 09 00:09:52 CDT 2002
basename
File.basename(
fileName [,
aSuffix
] )
->
aNewString
Returns the last component of the filename given in
fileName, which must be formed using forward slashes
(``
/'') regardless of the separator used on the local
file system. If
aSuffix is given and present at the end
of
fileName, it is removed.
File.basename("/home/gumby/work/ruby.rb")
サ
"ruby.rb"
File.basename("/home/gumby/work/ruby.rb", ".rb")
サ
"ruby"
chmod
File.chmod(
aModeInt [,
fileName
]+
)
->
anInteger
Changes permission bits on the
named file(s) to the bit pattern represented by
aModeInt.
Actual effects are operating system dependent (see the beginning
of this section). On Unix systems, see
chmod(2) for
details. Returns the number of files processed.
File.chmod(0644, "testfile", "out")
サ
2
chown
File.chown(
anOwnerInt,
aGroupInt [,
fileName
]+
)
->
anInteger
Changes the owner and group of the named file(s) to the given
numeric owner and group id's.
Only a process with superuser
privileges may change the owner of a file. The current owner of
a file may change the file's group to any group to which the
owner belongs. A
nil or -1 owner or group id is
ignored.
Returns the number of files processed.
File.chown(nil, 100, "testfile")
ctime
File.ctime(
fileName )
->
aTime
Returns the change time for the named file (the time at which
directory information about the file was changed, not the file
itself).
File.ctime("testfile")
サ
Sun Jun 09 00:17:17 CDT 2002
delete
File.delete(
[
fileName
]+
)
->
aFixnum
Deletes the named file(s).
Returns the number of files processed.
See also
Dir.rmdir
.
File.new("testrm", "w+").close
サ
nil
File.delete("testrm")
サ
1
dirname
File.dirname(
fileName )
->
fileName
Returns all components of the filename given in
fileName except the last one. The filename must be
formed using forward slashes (``
/'') regardless of the
separator used on the local file system.
File.dirname("/home/gumby/work/ruby.rb")
サ
"/home/gumby/work"
expand_path
File.expand_path(
fileName
[,
aDirString
] )
->
fileName
Converts a pathname to an absolute pathname.
Relative paths
are referenced from the current working directory of the process
unless
aDirString is given, in which case it will be used
as the starting point. The given pathname may start with a
``
~'', which expands to the process owner's home directory
(the environment variable
HOME
must be set correctly).
``
~
user'' expands to the named user's home
directory.
File.expand_path("~oracle/bin")
サ
"/home/oracle/bin"
File.expand_path("../../bin", "/tmp/x")
サ
"/bin"
ftype
File.ftype(
fileName )
->
fileType
Identifies the type of the named file;
the return string is one of
``
file'',
``
directory'',
``
characterSpecial'',
``
blockSpecial'',
``
fifo'',
``
link'', or
``
socket''.
File.ftype("testfile")
サ
"file"
File.ftype("/dev/tty")
サ
"characterSpecial"
File.ftype("/tmp/.X11-unix/X0")
サ
"socket"
join
File.join(
[
aString
]+
)
->
fileName
Returns a new string formed by joining the strings
using
File::SEPARATOR
(see Table 22.2 on page 304).
File.join("usr", "mail", "gumby")
サ
"usr/mail/gumby"
link
File.link(
anOldName,
aNewName )
-> 0
Creates a new name for an existing file using a hard link.
Will not overwrite
aNewName if it already exists (raising
a subclass of
SystemCallError).
Not available on all platforms.
File.link("testfile", ".testfile")
サ
0
IO.readlines(".testfile")[0]
サ
"This is line one\n"
lstat
File.lstat(
fileName )
->
aStat
Same as
IO#stat
, but does not follow the last symbolic link.
Instead, reports on the link itself.
File.symlink("testfile", "link2test")
サ
0
File.stat("testfile").size
サ
66
File.lstat("link2test").size
サ
8
File.stat("link2test").size
サ
66
mtime
File.mtime(
fileName )
->
aTime
Returns the modification time for the named file.
File.mtime("testfile")
サ
Sun Nov 25 23:48:26 CST 2001
new
File.new(
fileName,
aModeString="r" )
->
file
File.new(
fileName [,
aModeNum [
aPermNum
]
] )
->
file
Opens the file named by
fileName according to
aModeString (default is ``r'') and returns a new
File
object. See Table 22.5 on page 326 for a description
of
aModeString. The file mode may optionally be specified
as a
Fixnum by
or-ing together the flags described in
Table 22.3 on page 305.
Optional permission bits may be given in
aPermNum. These mode and permission bits are platform
dependent; on Unix systems, see
open(2) for details.
f = File.new("testfile", "r")
f = File.new("newfile", "w+")
f = File.new("newfile", File::CREAT|File::TRUNC|File::RDWR, 0644)
open
File.open(
fileName,
aModeString="r" )
->
file
File.open(
fileName [,
aModeNum [
aPermNum
]
] )
->
file
File.open(
fileName,
aModeString="r" )
{|
file | block }
->
nil
File.open(
fileName [,
aModeNum [
aPermNum
]
] )
{|
file | block }
->
nil
With no associated block,
open is a synonym for
File.new
.
If the optional code block is given, it will be passed
file
as an argument, and the file will automatically be closed when
the block terminates. In this instance,
File.open
returns
nil.
readlink
File.readlink(
fileName )
->
fileName
Returns the given symbolic link as a string.
Not available on all platforms.
File.symlink("testfile", "link2test")
サ
0
File.readlink("link2test")
サ
"testfile"
rename
File.rename(
anOldName,
aNewName )
-> 0
Renames the given file to the new name.
Raises a
SystemCallError if the file cannot be renamed.
File.rename("afile", "afile.bak")
サ
0
size
File.size(
fileName )
->
anInteger
Returns the size of the file in bytes.
File.size("testfile")
サ
66
split
File.split(
fileName )
->
anArray
Splits the given string into a directory and a file component and
returns them in a two-element array. See also
File.dirname
and
File.basename
.
File.split("/home/gumby/.profile")
サ
["/home/gumby", ".profile"]
stat
File.stat(
fileName )
->
aStat
Returns a
File::Stat object for the named file
(see
File::Stat, page 308).
File.stat("testfile").mtime
サ
Sun Nov 25 23:48:26 CST 2001
symlink
File.symlink(
anOldName,
aNewName )
-> 0 or
nil
Creates a symbolic link called
aNewName for the existing
file
anOldName.
Returns
nil on all platforms that do not support
symbolic links.
File.symlink("testfile", "link2test")
サ
0
truncate
File.truncate(
fileName,
anInteger )
-> 0
Truncates the file
fileName to be at most
anInteger
bytes long. Not available on all platforms.
f = File.new("out", "w")
f.write("1234567890")
サ
10
f.close
サ
nil
File.truncate("out", 5)
サ
0
File.size("out")
サ
5
umask
File.umask(
[
anInteger
] )
->
anInteger
Returns the current umask value for this process.
If the
optional argument is given, set the umask to that value and
return the previous value. Umask values are
subtracted
from the default permissions; so a umask of
0222 would make
a file read-only for everyone.
See also the discussion of permissions on page 301.
File.umask(0006)
サ
18
File.umask
サ
6
unlink
File.unlink(
[
fileName
]+
)
->
anInteger
Synonym for
File.delete
.
See also
Dir.rmdir
.
utime
File.utime(
anAccessTime,
aModTime [,
fileName
]+
)
->
aFixnum
Changes the access and modification times on a number of files.
The times must be instances of class
Time or integers
representing the number of seconds since epoch.
Returns the number of files processed.
Not available on all platforms.
File.utime(0, 0, "testfile")
サ
1
File.mtime("testfile")
サ
Wed Dec 31 18:00:00 CST 1969
File.utime(0, Time.now, "testfile")
サ
1
File.mtime("testfile")
サ
Sun Jun 09 00:17:19 CDT 2002
Lock-mode constants
LOCK_EX
Exclusive lock. Only one process may hold an
exclusive lock for a given file at a time.
LOCK_NB
Don't block when locking. May be combined
with other lock options using logical or.
LOCK_SH
Shared lock. Multiple processes may each hold a
shared lock for a given file at the same time.
LOCK_UN
Unlock.
instance methods
atime
file.atime
->
aTime
Returns the last access time for
file, or epoch if
file has
not been accessed.
File.new("testfile").atime
サ
Wed Dec 31 18:00:00 CST 1969
chmod
file.chmod(
aModeInt )
->
0
Changes permission bits on
file to the bit pattern
represented by
aModeInt. Actual effects are platform
dependent; on Unix systems, see
chmod(2) for details.
See the discussion of permissions on page 301.
f = File.new("out", "w");
f.chmod(0644)
サ
0
chown
file.chown(
anOwnerInt,
aGroupInt )
-> 0
Changes the owner and group of
file to the given
numeric owner and group id's.
Only a process with superuser
privileges may change the owner of a file. The current owner of
a file may change the file's group to any group to which the
owner belongs. A
nil or -1 owner or group id is
ignored.
File.new("testfile").chown(502, 1000)
ctime
file.ctime
->
aTime
Returns the change time for
file (that is, the time
directory information about the file was changed, not the file
itself).
File.new("testfile").ctime
サ
Sun Jun 09 00:17:19 CDT 2002
flock
file.flock (
aLockingConstant )
-> 0 or
false
Locks or unlocks a file according to
aLockingConstant (a
logical
or of the values in Table
22.4 on page 308). Returns
false if
File::LOCK_NB is specified and the operation would
otherwise have blocked.
Not available on all platforms.
File.new("testfile").flock(File::LOCK_UN)
サ
0
lstat
file.lstat
->
aStat
Same as
IO#stat
, but does not follow the last symbolic link.
Instead, reports on the link itself.
File.symlink("testfile", "link2test")
サ
0
File.stat("testfile").size
サ
66
f = File.new("link2test")
f.lstat.size
サ
8
f.stat.size
サ
66
mtime
file.mtime
->
aTime
Returns the modification time for
file.
File.new("testfile").mtime
サ
Sun Jun 09 00:17:19 CDT 2002
path
file.path
->
fileName
Returns the pathname used to create
file as a string.
File.new("testfile").path
サ
"testfile"
truncate
file.truncate(
anInteger )
-> 0
Truncates
file to at most
anInteger bytes. The file
must be opened for writing.
Not available on all platforms.
f = File.new("out", "w")
f.syswrite("1234567890")
サ
10
f.truncate(5)
サ
0
f.close()
サ
nil
File.size("out")
サ
5
Extracted from the book "Programming Ruby -
The Pragmatic Programmer's Guide"
Copyright
©
2001 by Addison Wesley Longman, Inc. This material may
be distributed only subject to the terms and conditions set forth in
the Open Publication License, v1.0 or later (the latest version is
presently available at
http://www.opencontent.org/openpub/)).
Distribution of substantively modified versions of this document is
prohibited without the explicit permission of the copyright holder.
Distribution of the work or derivative of the work in any standard
(paper) book form is prohibited unless prior permission is obtained
from the copyright holder.