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