Ruby 2.4

FileTest

module FileTest

FileTest执行类似于中使用的文件测试操作File::Stat。它作为一个独立的模块存在,其方法也被隐藏到File0类别中。(请注意,这不是通过包含:解释器作弊)。

Public Instance Methods

blockdev?(file_name) → true or false Show source

如果指定文件是块设备,则返回true

file_name可以是IO对象。

static VALUE rb_file_blockdev_p(VALUE obj, VALUE fname) { #ifndef S_ISBLK # ifdef S_IFBLK # define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) # else # define S_ISBLK(m) (0) /* anytime false */ # endif #endif #ifdef S_ISBLK struct stat st; if (rb_stat(fname, &st) < 0) return Qfalse; if (S_ISBLK(st.st_mode)) return Qtrue; #endif return Qfalse; }

chardev?(file_name) → true or false Show source

如果指定的文件是字符设备,则返回true

file_name可以是IO对象。

static VALUE rb_file_chardev_p(VALUE obj, VALUE fname) { #ifndef S_ISCHR # define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) #endif struct stat st; if (rb_stat(fname, &st) < 0) return Qfalse; if (S_ISCHR(st.st_mode)) return Qtrue; return Qfalse; }

directory?(file_name) → true or false Show source

如果指定的文件是目录或指向目录的符号链接,则返回true;否则返回false

file_name可以是IO对象。

File.directory?(".")

VALUE rb_file_directory_p(VALUE obj, VALUE fname) { #ifndef S_ISDIR # define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) #endif struct stat st; if (rb_stat(fname, &st) < 0) return Qfalse; if (S_ISDIR(st.st_mode)) return Qtrue; return Qfalse; }

zero?(file_name) → true or false Show source

返回true指定文件如果存在且大小为零。

file_name可以是IO对象。

static VALUE rb_file_zero_p(VALUE obj, VALUE fname) { struct stat st; if (rb_stat(fname, &st) < 0) return Qfalse; if (st.st_size == 0) return Qtrue; return Qfalse; }

executable?(file_name) → true or false Show source

返回true指定文件是否可由此进程的有效用户和组标识执行。参见eaccess(3)。

static VALUE rb_file_executable_p(VALUE obj, VALUE fname) { FilePathValue(fname fname = rb_str_encode_ospath(fname if (eaccess(StringValueCStr(fname), X_OK) < 0) return Qfalse; return Qtrue; }

executable_real?(file_name) → true or false Show source

如果指定文件可由此进程的实际用户和组标识执行,则返回true。请参阅访问权限(3)。

static VALUE rb_file_executable_real_p(VALUE obj, VALUE fname) { FilePathValue(fname fname = rb_str_encode_ospath(fname if (access(StringValueCStr(fname), X_OK) < 0) return Qfalse; return Qtrue; }

exist?(file_name) → true or false Show source

如果指定的文件存在,则返回true

file_name可以是IO对象。

“file exists”意味着stat()或fstat()系统调用成功。

static VALUE rb_file_exist_p(VALUE obj, VALUE fname) { struct stat st; if (rb_stat(fname, &st) < 0) return Qfalse; return Qtrue; }

exists?(file_name) → true or false Show source

弃用的方法。不要使用。

static VALUE rb_file_exists_p(VALUE obj, VALUE fname) { const char *s = "FileTest#"; if (obj == rb_mFileTest) { s = "FileTest."; } else if (obj == rb_cFile || (RB_TYPE_P(obj, T_CLASS) && RTEST(rb_class_inherited_p(obj, rb_cFile)))) { s = "File."; } rb_warning("%sexists? is a deprecated name, use %sexist? instead", s, s return rb_file_exist_p(obj, fname }

file?(file) → true or false Show source

返回true如果file名称存在并且是常规文件。

file 可以是IO对象。

If the file argument is a symbolic link, it will resolve the symbolic link and use the file referenced by the link.

static VALUE rb_file_file_p(VALUE obj, VALUE fname) { struct stat st; if (rb_stat(fname, &st) < 0) return Qfalse; if (S_ISREG(st.st_mode)) return Qtrue; return Qfalse; }

grpowned?(file_name) → true or false Show source

返回true指定文件是否存在,并且调用进程的有效组标识是文件的所有者。在Windows上返回false

file_name can be an IO object.

static VALUE rb_file_grpowned_p(VALUE obj, VALUE fname) { #ifndef _WIN32 struct stat st; if (rb_stat(fname, &st) < 0) return Qfalse; if (rb_group_member(st.st_gid)) return Qtrue; #endif return Qfalse; }

identical?(file_1, file_2) → true or false Show source

如果命名文件相同则返回true

file_1file_2可以是IO对象。

open("a", "w") {} p File.identical?("a", "a") #=> true p File.identical?("a", "./a") #=> true File.link("a", "b") p File.identical?("a", "b") #=> true File.symlink("a", "c") p File.identical?("a", "c") #=> true open("d", "w") {} p File.identical?("a", "d") #=> false

static VALUE rb_file_identical_p(VALUE obj, VALUE fname1, VALUE fname2) { #ifndef _WIN32 struct stat st1, st2; if (rb_stat(fname1, &st1) < 0) return Qfalse; if (rb_stat(fname2, &st2) < 0) return Qfalse; if (st1.st_dev != st2.st_dev) return Qfalse; if (st1.st_ino != st2.st_ino) return Qfalse; return Qtrue; #else BY_HANDLE_FILE_INFORMATION st1, st2; HANDLE f1 = 0, f2 = 0; f1 = w32_io_info(&fname1, &st1 if (f1 == INVALID_HANDLE_VALUE) return Qfalse; if (f1) { struct w32_io_info_args arg; arg.fname = &fname2; arg.st = &st2; f2 = (HANDLE)rb_ensure(call_w32_io_info, (VALUE)&arg, close_handle, (VALUE)f1 } else { f2 = w32_io_info(&fname2, &st2 } if (f2 == INVALID_HANDLE_VALUE) return Qfalse; if (f2) CloseHandle(f2 if (st1.dwVolumeSerialNumber == st2.dwVolumeSerialNumber && st1.nFileIndexHigh == st2.nFileIndexHigh && st1.nFileIndexLow == st2.nFileIndexLow) return Qtrue; return Qfalse; #endif }

owned?(file_name) → true or false Show source

返回true指定文件是否存在,并且调用进程的有效使用ID是文件的所有者。

file_name可以是IO对象。

static VALUE rb_file_owned_p(VALUE obj, VALUE fname) { struct stat st; if (rb_stat(fname, &st) < 0) return Qfalse; if (st.st_uid == geteuid()) return Qtrue; return Qfalse; }

pipe?(file_name) → true or false Show source

返回true指定文件是否为pipe。

file_name可以是IO对象。

static VALUE rb_file_pipe_p(VALUE obj, VALUE fname) { #ifdef S_IFIFO # ifndef S_ISFIFO # define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) # endif struct stat st; if (rb_stat(fname, &st) < 0) return Qfalse; if (S_ISFIFO(st.st_mode)) return Qtrue; #endif return Qfalse; }

readable?(file_name) → true or false Show source

返回true指定文件是否可由此进程的有效用户和组标识读取。参见eaccess(3)。

static VALUE rb_file_readable_p(VALUE obj, VALUE fname) { FilePathValue(fname fname = rb_str_encode_ospath(fname if (eaccess(StringValueCStr(fname), R_OK) < 0) return Qfalse; return Qtrue; }

readable_real?(file_name) → true or false Show source

返回true指定文件是否可由此进程的实际用户和组标识读取。请参阅访问权限(3)。

static VALUE rb_file_readable_real_p(VALUE obj, VALUE fname) { FilePathValue(fname fname = rb_str_encode_ospath(fname if (access(StringValueCStr(fname), R_OK) < 0) return Qfalse; return Qtrue; }

setgid?(file_name) → true or false Show source

返回true指定文件是否设置了setgid位。

static VALUE rb_file_sgid_p(VALUE obj, VALUE fname) { #ifdef S_ISGID return check3rdbyte(fname, S_ISGID #else return Qfalse; #endif }

setuid?(file_name) → true or false Show source

返回true指定文件是否设置了setuid位。

static VALUE rb_file_suid_p(VALUE obj, VALUE fname) { #ifdef S_ISUID return check3rdbyte(fname, S_ISUID #else return Qfalse; #endif }

size(file_name) → integer Show source

返回file_name的大小。

file_name可以是IO对象。

static VALUE rb_file_s_size(VALUE klass, VALUE fname) { struct stat st; if (rb_stat(fname, &st) < 0) { int e = errno; FilePathValue(fname rb_syserr_fail_path(e, fname } return OFFT2NUM(st.st_size }

size?(file_name) → Integer or nil Show source

返回nil如果file_name不存在或具有零大小,否则返回文件的大小。

file_name可以是IO对象。

static VALUE rb_file_size_p(VALUE obj, VALUE fname) { struct stat st; if (rb_stat(fname, &st) < 0) return Qnil; if (st.st_size == 0) return Qnil; return OFFT2NUM(st.st_size }

socket?(file_name) → true or false Show source

如果指定的文件是套接字,则返回true

file_name可以是IO对象。

static VALUE rb_file_socket_p(VALUE obj, VALUE fname) { #ifndef S_ISSOCK # ifdef _S_ISSOCK # define S_ISSOCK(m) _S_ISSOCK(m) # else # ifdef _S_IFSOCK # define S_ISSOCK(m) (((m) & S_IFMT) == _S_IFSOCK) # else # ifdef S_IFSOCK # define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) # endif # endif # endif #endif #ifdef S_ISSOCK struct stat st; if (rb_stat(fname, &st) < 0) return Qfalse; if (S_ISSOCK(st.st_mode)) return Qtrue; #endif return Qfalse; }

sticky?(file_name) → true or false Show source

返回true指定文件是否设置了粘滞位。

static VALUE rb_file_sticky_p(VALUE obj, VALUE fname) { #ifdef S_ISVTX return check3rdbyte(fname, S_ISVTX #else return Qnil; #endif }

symlink?(file_name) → true or false Show source

返回true指定文件是否为符号链接。

static VALUE rb_file_symlink_p(VALUE obj, VALUE fname) { #ifndef S_ISLNK # ifdef _S_ISLNK # define S_ISLNK(m) _S_ISLNK(m) # else # ifdef _S_IFLNK # define S_ISLNK(m) (((m) & S_IFMT) == _S_IFLNK) # else # ifdef S_IFLNK # define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) # endif # endif # endif #endif #ifdef S_ISLNK struct stat st; FilePathValue(fname fname = rb_str_encode_ospath(fname if (lstat(StringValueCStr(fname), &st) < 0) return Qfalse; if (S_ISLNK(st.st_mode)) return Qtrue; #endif return Qfalse; }

world_readable?(file_name) → integer or nil Show source

如果file_name可被其他人读取,则返回一个表示file_name的文件权限位的整数。否则返回nil。这些位的含义与平台有关; 在Unix系统上,请参阅stat(2)

file_name可以是IO对象。

File.world_readable?("/etc/passwd") #=> 420 m = File.world_readable?("/etc/passwd") sprintf("%o", m) #=> "644"

static VALUE rb_file_world_readable_p(VALUE obj, VALUE fname) { #ifdef S_IROTH struct stat st; if (rb_stat(fname, &st) < 0) return Qnil; if ((st.st_mode & (S_IROTH)) == S_IROTH) { return UINT2NUM(st.st_mode & (S_IRUGO|S_IWUGO|S_IXUGO) } #endif return Qnil; }

world_writable?(file_name) → integer or nil Show source

如果file_name可由其他人写入,则返回一个表示file_name的文件权限位的整数。否则返回nil。这些位的含义与平台有关;在Unix系统上,请参阅stat(2)

file_name可以是IO对象。

File.world_writable?("/tmp") #=> 511 m = File.world_writable?("/tmp") sprintf("%o", m) #=> "777"

static VALUE rb_file_world_writable_p(VALUE obj, VALUE fname) { #ifdef S_IWOTH struct stat st; if (rb_stat(fname, &st) < 0) return Qnil; if ((st.st_mode & (S_IWOTH)) == S_IWOTH) { return UINT2NUM(st.st_mode & (S_IRUGO|S_IWUGO|S_IXUGO) } #endif return Qnil; }

writable?(file_name) → true or false Show source

返回true指定文件是否可由此进程的有效用户和组标识写入。参见eaccess(3)。

static VALUE rb_file_writable_p(VALUE obj, VALUE fname) { FilePathValue(fname fname = rb_str_encode_ospath(fname if (eaccess(StringValueCStr(fname), W_OK) < 0) return Qfalse; return Qtrue; }

writable_real?(file_name) → true or false Show source

返回true指定文件是否可由此进程的实际用户和组标识写入。查看访问权限(3)

static VALUE rb_file_writable_real_p(VALUE obj, VALUE fname) { FilePathValue(fname fname = rb_str_encode_ospath(fname if (access(StringValueCStr(fname), W_OK) < 0) return Qfalse; return Qtrue; }

zero?(file_name) → true or false Show source

返回true指定文件是否存在且大小为零。

file_name可以是IO对象。

static VALUE rb_file_zero_p(VALUE obj, VALUE fname) { struct stat st; if (rb_stat(fname, &st) < 0) return Qfalse; if (st.st_size == 0) return Qtrue; return Qfalse; }