2016-09-11 12 views
2

でファイルに書き込まれたオブジェクトをデコードすることはできません私は私のテストを実行しようとすると、私はこの例外を取得しています:はすぐbincode

thread 'persistent_log::doc::test::test_sync' panicked at 'called `Result::unwrap()` on an `Err` value: IoError(Error { repr: Os { code: 9, message: "Bad file descriptor" } })', ../src/libcore/result.rs:783 

期間:

#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord,RustcEncodable,RustcDecodable)] 
pub struct Term(u64); 

テスト:

fn create() { 
    File::create(&"term"); 
} 

#[test] 
fn test_sync() { 
    create(); 

    let mut f = File::open(&"term").unwrap(); 

    let term = Term(10); 

    encode_into(&term, &mut f, SizeLimit::Infinite).unwrap(); 

    let decoded_term: Term = decode_from(&mut f, SizeLimit::Infinite).unwrap(); 

    assert_eq!(decoded_term, term); 
} 

オブジェクトにtermを書き込んだ後、それを読み込みたいとします。

答えて

10

File::openは、読み取り専用モードでファイルを開くため、ファイルへの書き込みは失敗します。

読み取りと書き込みのアクセス権を持つファイルを開くには、OpenOptionsを使用する必要があります。あなたは、ファイルにバイトを書いた後

thread 'persistent_log::doc::test::test_sync' panicked at 'called Result::unwrap() on an Err value: IoError(Error { repr: Custom(Custom { kind: UnexpectedEof, error: StringError("failed to fill whole buffer") }) })', ../src/libcore/result.rs:783

、ファイルのカーソルがの端に配置されます。

use std::fs::OpenOptions; 

let file = OpenOptions::new() 
      .read(true) 
      .write(true) 
      .create(true) 
      .open("term"); 

グレート、今は新しい例外を取得しますファイル。ファイルから読み込む前に、seekをファイルの先頭に戻す必要があります。そうしないと、このエラーが発生します。

file.seek(SeekFrom::Start(0));