Google Documents List Data API ダウンロード編

ファイルのダウンロードには, DocumentsRequest.Download を使用します。以下のサンプルでは,再度リストを取得しています。これは, Document^ の寿命が分かっていないためです。初めのリスト取得で doc->Id が保存してあり, UI でダウンロード対象が m_id として指定されます。今回のリスト取得で比較を行い,一致した場合はダウンロードします。

また,ネイティブクラスのメンバにマネージドクラスへのポインタ(この場合, Document^ )を持たせる方法もよく分かっていないため,上記方法をとっています。

Stream からバッファに一気に読み込む処理がありそうなのですが, .NET がよく分かっていないので1KBずつ読み出しています。

GDataCredentials^ c = gcnew GDataCredentials(email, pass);
RequestSettings^ r = gcnew RequestSettings("App", c);
DocumentsRequest^ dr = gcnew DocumentsRequest(r);
Feed^ feed = dr->GetEverything();
for each (Document^ doc in feed->Entries) {
    marshal_context^ context = gcnew marshal_context();
    MYSTR id = context->marshal_as(doc->Id);
    delete context;
    if (id == m_id) {
        Stream^ s = dr->Download(doc, "");
        MYBUF buf;
        array^ bytes = gcnew array(1024);
        pin_ptr p = &bytes[0];
        for (;;) {
            int n = s->Read(bytes, 0, 1024);
            if (n == 0)
                break;
            buf.Add(n, p);
        }

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です