ruby - 基本的な文法 - ファイル

 
1. 概要
2. File::Stat
3. ファイルかどうかを判定する
4. テキストファイルの読み書き

1. 概要

 本項は、下記のサイトを参考にさせていただきました。
class File (Ruby 2.5.0)」
「Ruby でファイルのタイムスタンプを調べる - Qiita」
「Ruby の FileTest.directory? だけでファイルかディレクトリかを判定してはダメ - Qiita」
「Rubyでファイルの書き込み・読み込みを行う方法 | UX MILK
 結局これは、次章のライブラリの項目で書くべきであったな・・・と。  整理するときがあったら、次章に書き直します。

2. File::Stat

 C言語の stat 関数的なものと理解しています。
file = __FILE__
puts("#{__LINE__} file=[#{file}]")

stat = File::Stat.new(file)

puts("#{__LINE__} stat.size=[#{stat.size}]")
puts("#{__LINE__} stat.atime=[#{stat.atime}]")
puts("#{__LINE__} stat.mtime=[#{stat.mtime}]")
puts("#{__LINE__} stat.ctime=[#{stat.ctime}]")


 上記のソースを実行すると下記の結果が得られます。
2 file=[/usr/home/hogehoge/lang/ruby/file/stat.rb]
6 stat.size=[268]
7 stat.atime=[2018-12-14 01:39:53 +0900]
8 stat.mtime=[2018-11-05 12:06:31 +0900]
9 stat.ctime=[2018-11-05 12:06:31 +0900]
 このソース 6行目以降を

p stat
 で一気に出力しようとしたのですが。  コマンドラインから実行する分にはうまく実行できるのですが、ウェブ越しに実行しようとするとうまく出力できません。

3. ファイルかどうかを判定する

 FileTest という組み込みライブラリが用意されています。
file = __FILE__
dir  = File.dirname(File.expand_path(__FILE__))

puts("#{__LINE__} file=[#{file}] dir=[#{dir}]")

if FileTest.file?(file)
  puts("#{__LINE__} [#{file}] はファイルです")
else
  puts("#{__LINE__} [#{file}] はファイルではありません")
end

if FileTest.directory?(dir)
  puts("#{__LINE__} [#{dir}] はディレクトリです")
else
  puts("#{__LINE__} [#{dir}] はディレクトリではありません")
end

 上記のソースを実行すると下記の結果が得られます。
4 file=[/usr/home/hogehoge/lang/ruby/file/filetest.rb] dir=[/usr/home/hogehoge/lang/ruby/file]
7 [/usr/home/hogehoge/lang/ruby/file/filetest.rb] はファイルです
13 [/usr/home/hogehoge/lang/ruby/file] はディレクトリです

4. テキストファイルの読み書き

require 'pathname'

string1  = "テキストファイルに\n"
string1 += "出力してみようと\n"
string1 += "思うのです\n"

filename = '/tmp/text01.txt'

Pathname.new(filename).open('w') do | file |
  file.puts(string1)
end

string2 = String.new

Pathname.new(filename).open('r') do | file |
  string2 = file.read
end

puts("[#{sprintf("%3d", __LINE__)}] string2=[#{string2}] ")

 というソースを書いて実行すると下記の結果が得られます。
[ 19] string2=[テキストファイルに
出力してみようと
思うのです
]