2016-12-11 4 views
-3

Я читаю пустой HTML-файл, как это:Rails 4: TypeError - нет неявного преобразования строки в Integer

file = File.read("file_path/file.html", "wb") 

Почему что бросить эту TypeError?

не неявное преобразование строки в Integer



Вход:

Completed 500 Internal Server Error in 8ms (ActiveRecord: 0.0ms) 

TypeError (no implicit conversion of String into Integer): 
    app/controllers/abc_controller.rb:49:in `read' 
    app/controllers/abc_controller.rb:49:in `build' 
+0

показать журнал полного исключения пожалуйста – sig

+0

@sig добавил запись в журнале – jonhue

ответ

2

Если файл пуст, то, что вы хотите прочитать именно?

Второй параметр для File#read является необязательным и должен быть длиной строки, которую вы хотите прочитать из файла. "wb" не является Целочисленным, следовательно, messsage ошибки.

Параметры, которые вы использовали, больше похожи на open.

Читать файл

Если вы хотите, чтобы прочитать файл, просто использовать

content = File.read(filename) 

Написать файл

Если вы хотите, чтобы написать его, вы можете использовать

File.open(filename,'w+') do |file| 
    file.puts "content" 
end 

'w+' является файловым режимом, который:

Заменяет существующий файл, если файл существует. Если файл не существует , он создает новый файл для чтения и записи.

Существование файла

Если вы хотите проверить, что файл существует:

File.exists?(filename) 

ли файл пуст?

Если вы хотите проверить, что существующий файл пуст:

File.size(filename)==0 

Файл может быть полным непечатаемых (размер> 0, но все еще «пустой»). С рельсами:

File.read(filename).blank? 
+0

Есть ли способ проверить, если файл пуст или нет? – jonhue

+0

С 'w +', существующий файл будет перезаписан. Если файл не существует, он создается. Что вы хотите сделать точно? –

+0

Я хочу получить содержимое файла, который я создал.Но я не знаю, пуст ли этот файл или нет. Если он пуст, он выдает ошибку. Поэтому мне нужно проверить, пуст ли этот файл или нет. – jonhue

0

Для чтения файла вы можете использовать rb вместо wb.

data = File.open("ur path","rb") 
+0

'data' - это не данные в этом случае, это файловый объект. Не его содержание. –

+0

@ EricDuminil Yaa вы правы данные - это файловый объект, который вы можете выполнять с использованием данных do | file | file.puts "content" end – Ajaykumar