У меня есть функция, которая должна прочитать файл и вернуть его содержимое.
fn read (file_name: &str) -> &str {
let mut f = File::open(file_name)
.expect(&format!("file not found: {}", file_name));
let mut contents = String::new();
f.read_to_string(&mut contents)
.expect(&format!("cannot read file {}", file_name));
return &contents;
}
Но я получаю эту ошибку:
--> src\main.rs:20:13
|
20 | return &contents;
| ^^^^^^^^ borrowed value does not live long enough
21 | }
| - borrowed value only lives until here
|
Что я делаю не так?
Моя идея о том, что происходит здесь, такова:
let mut f = File::open(file_name).expect(....);
- он берет дескриптор файла и сообщает ОС, что мы хотим с ним что-то делать.
let mut contents = String::new();
- это создает векторную структуру данных в куче для хранения данных, которые мы собираемся прочитать из файла.
f.read_to_string(&mut contents).expect(...);
- считывает файл в contents
пространство.
return &contents;
- возвращает указатель на вектор, в котором хранятся данные файла.
Почему я не могу вернуть нужный мне указатель?
Как мне закрыть файл (переменная f
)? Я думаю, что ржавчина закроет его для меня после того, как переменная выйдет из области видимости, но что, если мне нужно закрыть ее до этого?