ファイルのダウンロードには, 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); }
コメントを残す