ArcGIS Pro 3.4 API Reference Guide
ArcGIS.Core.Data Namespace / Attachment Class
Members Example Version

Attachment Class
Represents a document associated with a row.
Syntax
public sealed class Attachment : ArcGIS.Core.CoreObjectsBase, System.IDisposable  
Example
Adding Attachments
public async Task AddingAttachments()
{
    await ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() =>
    {
        using (Geodatabase geodatabase = new Geodatabase(new DatabaseConnectionFile(new Uri("path\\to\\sde\\file\\sdefile.sde"))))
        using (FeatureClass parkFeatureClass = geodatabase.OpenDataset<FeatureClass>("LocalGovernment.GDB.Park"))
        {
            QueryFilter filter = new QueryFilter { WhereClause = "NUMPARKING > 0" };

            using (RowCursor parkingCursor = parkFeatureClass.Search(filter, false))
            {
                while (parkingCursor.MoveNext())
                {
                    using (MemoryStream stream = CreateMemoryStreamFromContentsOf("Sample.xml"))
                    {
                        Attachment attachment = new Attachment("Sample.xml", "text/xml", stream);

                        using (Row row = parkingCursor.Current)
                        {
                            long attachmentId = row.AddAttachment(attachment);
                        }
                    }
                }
            }
        }
    });
}

private MemoryStream CreateMemoryStreamFromContentsOf(String fileNameWithPath)
{
    MemoryStream memoryStream = new MemoryStream();

    using (FileStream file = new FileStream(fileNameWithPath, FileMode.Open, FileAccess.Read))
    {
        byte[] bytes = new byte[file.Length];
        file.Read(bytes, 0, (int)file.Length);
        memoryStream.Write(bytes, 0, (int)file.Length);
    }

    return memoryStream;
}
Updating Attachments
public async Task UpdatingAttachments()
{
    await ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() =>
    {
        using (Geodatabase geodatabase = new Geodatabase(new DatabaseConnectionFile(new Uri("path\\to\\sde\\file\\sdefile.sde"))))
        using (FeatureClass landUseCaseFeatureClass = geodatabase.OpenDataset<FeatureClass>("LocalGovernment.GDB.LandUseCase"))
        {
            QueryFilter filter = new QueryFilter { WhereClause = "CASETYPE = 'Rezoning'" };

            using (RowCursor landUseCursor = landUseCaseFeatureClass.Search(filter, false))
            {
                while (landUseCursor.MoveNext())
                {
                    using (Feature rezoningUseCase = (Feature)landUseCursor.Current)
                    {
                        IReadOnlyList<Attachment> rezoningAttachments = rezoningUseCase.GetAttachments();
                        IEnumerable<Attachment> filteredAttachments = rezoningAttachments.Where(attachment => !attachment.GetName().Contains("rezoning"));

                        foreach (Attachment attachmentToUpdate in filteredAttachments)
                        {
                            attachmentToUpdate.SetName(attachmentToUpdate.GetName().Replace(".pdf", "Rezoning.pdf"));
                            rezoningUseCase.UpdateAttachment(attachmentToUpdate);
                        }
                    }
                }
            }
        }
    });
}
Inheritance Hierarchy

System.Object
   ArcGIS.Core.CoreObjectsBase
      ArcGIS.Core.Data.Attachment

Requirements

Target Platforms: Windows 11, Windows 10

ArcGIS Pro version: 3 or higher.
See Also