0

テキスト ファイルから情報を取得するためにテキスト ファイルを読みましたが、後でファイルが格納されているディレクトリの名前を変更する必要があります。ファイルがロックされているため、それを行うことができません。ファイルから読み取る関数をコメントアウトするか、手動でファイルのロックを解除すると (unlocker ユーティリティ)、すべてうまくいきます。

Ruby 1.8.7 (2010-08-16 パッチレベル 302) [i386-mingw32] を使用しています。

この行はファイルを開いたままにしますFile.open(file).readlines.each{|line|

これらの 2 行は、ファイルを開いたままにします

    my_file=File.open(file,"r")
    my_file.collect {|line|

を使用して最後にファイルを閉じない限りmy_file.close

IO.html#method-c-open状態のコア 1.8.7の男

オプションのコード ブロックが指定されている場合は、io が引数として渡され、ブロックが終了すると IO オブジェクトが自動的に閉じられます。

そのため、ファイルがまだ開いている理由がわかりません。

1.8.7 で、テキスト ファイルを読み取って自動的に閉じるための 1 行のコードは何ですか?

4

3 に答える 3

5

ドキュメントは明確です。ただし、ブロックを に渡していますcollect。に渡さないのでopen、ファイルを閉じるのはあなたの責任です。

ファイルを自動的に閉じるには、これを試してください:

File.open(file,"r") do |f|
  f.collect # or whatever
end
于 2012-06-14T23:39:20.080 に答える
1

ブロックを「open」呼び出しに直接渡してみてください。

File.open(file, 'r') do |f|
  f.each_line do |line|
    # Process each line
  end
end

または、ファイルの内容を 1 回のショットで取得したい場合は、次を試してください。

lines = File.read(file).split(/\r?\n/)
于 2012-06-14T23:45:18.387 に答える