概要
ArcGIS Pro SDK for .NET でジオデータベースに格納されている特定のアタッチメント テーブルから添付ファイルを一括して抽出する方法をご紹介します。
サンプル コード
特定のアタッチメント テーブルから添付ファイルを一括してローカルに抽出するサンプル コードをご紹介します。

// *.cs ファイル
internal class Export : Button
{
protected override async void OnClick()
{
await QueuedTask.Run(() =>
{
// 添付ファイルのエクスポート先のフォルダー パスの設定
string outputFolder = @"<添付ファイルのエクスポート先のフォルダー パス>";
Directory.CreateDirectory(outputFolder);
// エクスポートするアタッチメント テーブルが格納されているジオデータベースのフォルダー パスの特定
using (Geodatabase gdb = new Geodatabase(
new FileGeodatabaseConnectionPath(
new Uri(@"<任意のディレクトリ><ジオデータベース名>.gdb"))))
{
// エクスポートするアタッチメント テーブルの特定
using (Table attachmentTable = gdb.OpenDataset<Table>("<フィーチャクラス名>__ATTACH"))
{
QueryFilter qf = new QueryFilter
{
// すべての添付ファイルをエクスポート
WhereClause = "1=1"
};
using (RowCursor cursor = attachmentTable.Search(qf, false))
{
while (cursor.MoveNext())
{
using (Row row = cursor.Current)
{
// 特定したアタッチメント テーブルの読み込み
var relObjectId = row["REL_GLOBALID"];
string fileName = row["ATT_NAME"].ToString();
var blobObj = row["DATA"];
// フィーチャごとにフォルダーを作成し、フィーチャに添付されているファイルを各フォルダーへ抽出
if (blobObj is System.IO.MemoryStream ms)
{
string featureFolder = Path.Combine(outputFolder, relObjectId.ToString());
Directory.CreateDirectory(featureFolder);
string filePath = Path.Combine(featureFolder, fileName);
File.WriteAllBytes(filePath, ms.ToArray());
}
}
}
}
}
}
});
// 添付ファイルのエクスポートが正常に完了した時のメッセージを表示
MessageBox.Show("添付ファイルのエクスポートが完了しました。");
}
}
注意事項
こちらのサンプルはあくまでもコーディングの見本であり、ツール実行時に発生したエラーの対処方法につきましては、サポート対象外とさせていただきます。また、操作方法やソースコードに関するご質問は別途有償の開発者サポート契約にてご対応させていただきます。新規バージョンに対応したツールを継続的に提供することを保証するものでもないことも予めご承知おきください。なお、ツールを利用して生じたいかなる損害についても弊社では責任を負いかねます。
このナレッジはお役に立ちましたか?
フィードバックをいただきありがとうございます!