Documentation Index Fetch the complete documentation index at: https://mintlify.com/microsoftgraph/msgraph-sdk-dotnet/llms.txt
Use this file to discover all available pages before exploring further.
Overview
The DriveItems API provides operations to manage files and folders in OneDrive and SharePoint. Access through drive paths like graphClient.Me.Drive.Items[itemId] or graphClient.Me.Drive.Root.ItemWithPath(path).
Request Builders
// By item ID
graphClient . Me . Drive . Items [ "item-id" ]
graphClient . Drives [ "drive-id" ]. Items [ "item-id" ]
// By path from root
graphClient . Me . Drive . Root . ItemWithPath ( "Documents/file.pdf" )
// Root folder
graphClient . Me . Drive . Root
Get DriveItem
Retrieve file or folder metadata.
// By ID
var item = await graphClient . Me . Drive . Items [ "item-id" ]. GetAsync ();
// By path
var item = await graphClient . Me . Drive . Root
. ItemWithPath ( "Documents/Report.pdf" )
. GetAsync ();
if ( item . Folder != null )
{
Console . WriteLine ( $"Folder: { item . Name } ( { item . Folder . ChildCount } items)" );
}
else if ( item . File != null )
{
Console . WriteLine ( $"File: { item . Name } ( { item . Size } bytes)" );
Console . WriteLine ( $"MIME type: { item . File . MimeType } " );
}
Upload Files
Small File Upload (< 4MB)
using var fileStream = File . OpenRead ( "document.pdf" );
var uploadedItem = await graphClient . Me . Drive . Root
. ItemWithPath ( "Documents/document.pdf" )
. Content
. PutAsync ( fileStream );
Console . WriteLine ( $"Uploaded: { uploadedItem . Id } " );
Large File Upload (>= 4MB)
using var fileStream = File . OpenRead ( "large-video.mp4" );
// Create upload session
var uploadSession = await graphClient . Me . Drive . Root
. ItemWithPath ( "Videos/large-video.mp4" )
. CreateUploadSession
. PostAsync ( new CreateUploadSessionPostRequestBody
{
Item = new DriveItemUploadableProperties
{
AdditionalData = new Dictionary < string , object >
{
{ "@microsoft.graph.conflictBehavior" , "rename" }
}
}
});
// Upload in chunks
int maxChunkSize = 320 * 1024 * 10 ; // 3.2 MB
var fileUploadTask = new LargeFileUploadTask < DriveItem >(
uploadSession , fileStream , maxChunkSize );
var uploadResult = await fileUploadTask . UploadAsync ();
if ( uploadResult . UploadSucceeded )
{
Console . WriteLine ( $"Upload complete: { uploadResult . ItemResponse . Id } " );
}
Download Files
Download File Content
var stream = await graphClient . Me . Drive . Items [ "item-id" ]
. Content
. GetAsync ();
using var fileStream = File . Create ( "downloaded-file.pdf" );
await stream . CopyToAsync ( fileStream );
Get Download URL
var item = await graphClient . Me . Drive . Items [ "item-id" ]. GetAsync ();
var downloadUrl = item . AdditionalData [ "@microsoft.graph.downloadUrl" ] as string ;
Console . WriteLine ( $"Download URL: { downloadUrl } " );
// URL is temporary and expires
Folder Operations
Create Folder
var newFolder = new DriveItem
{
Name = "Project Files" ,
Folder = new Folder { },
AdditionalData = new Dictionary < string , object >
{
{ "@microsoft.graph.conflictBehavior" , "rename" }
}
};
var folder = await graphClient . Me . Drive . Items [ "parent-folder-id" ]
. Children
. PostAsync ( newFolder );
List Folder Contents
var children = await graphClient . Me . Drive . Items [ "folder-id" ]
. Children
. GetAsync ();
foreach ( var item in children . Value )
{
var type = item . Folder != null ? "Folder" : "File" ;
Console . WriteLine ( $"[ { type } ] { item . Name } " );
}
Copy and Move
Copy Item
var copyRequest = new CopyPostRequestBody
{
ParentReference = new ItemReference
{
DriveId = "destination-drive-id" ,
Id = "destination-folder-id"
},
Name = "Copy of Document.pdf"
};
var monitorUrl = await graphClient . Me . Drive . Items [ "item-id" ]
. Copy
. PostAsync ( copyRequest );
// Monitor operation status
// Use the returned URL to check progress
Move Item
var updateItem = new DriveItem
{
ParentReference = new ItemReference
{
Id = "destination-folder-id"
},
Name = "Renamed Document.pdf" // Optional: rename while moving
};
await graphClient . Me . Drive . Items [ "item-id" ]. PatchAsync ( updateItem );
Rename Item
var updateItem = new DriveItem
{
Name = "New Filename.pdf"
};
await graphClient . Me . Drive . Items [ "item-id" ]. PatchAsync ( updateItem );
Delete Item
// Move to recycle bin
await graphClient . Me . Drive . Items [ "item-id" ]. DeleteAsync ();
// Permanent delete (bypass recycle bin)
await graphClient . Me . Drive . Items [ "item-id" ]
. PermanentDelete
. PostAsync ();
Sharing
Create Sharing Link
var sharingLink = await graphClient . Me . Drive . Items [ "item-id" ]
. CreateLink
. PostAsync ( new CreateLinkPostRequestBody
{
Type = "view" , // view, edit, embed
Scope = "anonymous" // anonymous, organization
});
Console . WriteLine ( $"Share URL: { sharingLink . Link . WebUrl } " );
Grant Permissions
var invite = await graphClient . Me . Drive . Items [ "item-id" ]
. Invite
. PostAsync ( new InvitePostRequestBody
{
RequireSignIn = true ,
SendInvitation = true ,
Roles = new [] { "read" }, // read, write
Recipients = new List < DriveRecipient >
{
new DriveRecipient
{
Email = "user@contoso.com"
}
},
Message = "Please review this document"
});
List Permissions
var permissions = await graphClient . Me . Drive . Items [ "item-id" ]
. Permissions
. GetAsync ();
foreach ( var permission in permissions . Value )
{
Console . WriteLine ( $"Type: { permission . Link ? . Type ?? "Direct" } " );
Console . WriteLine ( $"Roles: { string . Join ( ", " , permission . Roles )} " );
}
Remove Permission
await graphClient . Me . Drive . Items [ "item-id" ]
. Permissions [ "permission-id" ]
. DeleteAsync ();
Versions
List Versions
var versions = await graphClient . Me . Drive . Items [ "item-id" ]
. Versions
. GetAsync ();
foreach ( var version in versions . Value )
{
Console . WriteLine ( $"Version { version . Id } " );
Console . WriteLine ( $" Modified: { version . LastModifiedDateTime } " );
Console . WriteLine ( $" Modified by: { version . LastModifiedBy . User . DisplayName } " );
Console . WriteLine ( $" Size: { version . Size } bytes" );
}
Restore Version
await graphClient . Me . Drive . Items [ "item-id" ]
. Versions [ "version-id" ]
. RestoreVersion
. PostAsync ();
Download Version
var stream = await graphClient . Me . Drive . Items [ "item-id" ]
. Versions [ "version-id" ]
. Content
. GetAsync ();
Thumbnails
var thumbnails = await graphClient . Me . Drive . Items [ "item-id" ]
. Thumbnails
. GetAsync ();
foreach ( var set in thumbnails . Value )
{
Console . WriteLine ( $"Large: { set . Large ? . Url } " );
Console . WriteLine ( $"Medium: { set . Medium ? . Url } " );
Console . WriteLine ( $"Small: { set . Small ? . Url } " );
}
// Get specific size
var customThumbnail = await graphClient . Me . Drive . Items [ "item-id" ]
. Thumbnails [ "0" ]
. GetAsync ();
// Search in folder
var results = await graphClient . Me . Drive . Items [ "folder-id" ]
. Search ( "project" )
. GetAsync ();
// Search entire drive
var results = await graphClient . Me . Drive . Root
. Search ( "*.pdf" )
. GetAsync ();
foreach ( var item in results . Value )
{
Console . WriteLine ( $" { item . Name } - { item . WebUrl } " );
}
Checkout/Checkin
Checkout File
await graphClient . Me . Drive . Items [ "item-id" ]
. Checkout
. PostAsync ();
Checkin File
await graphClient . Me . Drive . Items [ "item-id" ]
. Checkin
. PostAsync ( new CheckinPostRequestBody
{
Comment = "Updated financial data" ,
CheckInAs = "majorVersion" // minorVersion, majorVersion, overwrite
});
Undo Checkout
await graphClient . Me . Drive . Items [ "item-id" ]
. UndoCheckout
. PostAsync ();
Preview
Get preview information for Office files.
var preview = await graphClient . Me . Drive . Items [ "item-id" ]
. Preview
. PostAsync ( new PreviewPostRequestBody
{
Viewer = "onedrive" // onedrive, officeonline
});
Console . WriteLine ( $"Preview URL: { preview . GetUrl } " );
Analytics
Get item analytics and activity.
var analytics = await graphClient . Me . Drive . Items [ "item-id" ]
. Analytics
. GetAsync ();
var itemActivity = analytics . ItemActivityStats ;
foreach ( var activity in itemActivity )
{
Console . WriteLine ( $"Access: { activity . Access . ActionCount } " );
Console . WriteLine ( $"Period: { activity . StartDateTime } to { activity . EndDateTime } " );
}
Delta Query
Track changes to items.
var delta = await graphClient . Me . Drive . Root . Delta . GetAsync ();
foreach ( var item in delta . Value )
{
if ( item . Deleted != null )
{
Console . WriteLine ( $"Deleted: { item . Name } " );
}
else
{
Console . WriteLine ( $"Changed: { item . Name } " );
}
}
// Store delta link
var deltaLink = delta . OdataDeltaLink ;
Get Changes for Specific Item
var delta = await graphClient . Me . Drive . Items [ "folder-id" ]
. Delta
. GetAsync ();
Special Operations
Follow/Unfollow
// Follow
await graphClient . Me . Drive . Items [ "item-id" ]. Follow . PostAsync ();
// Unfollow
await graphClient . Me . Drive . Items [ "item-id" ]. Unfollow . PostAsync ();
var extraction = await graphClient . Me . Drive . Items [ "item-id" ]
. ExtractSensitivityLabels
. PostAsync ();
Conflict Behavior
When creating or uploading items:
AdditionalData = new Dictionary < string , object >
{
{ "@microsoft.graph.conflictBehavior" , "rename" }
// Options: rename, replace, fail
}
Error Handling
using Microsoft . Graph . Models . ODataErrors ;
try
{
var item = await graphClient . Me . Drive . Items [ "item-id" ]. GetAsync ();
}
catch ( ODataError error )
{
if ( error . Error . Code == "itemNotFound" )
{
Console . WriteLine ( "Item not found" );
}
else if ( error . Error . Code == "accessDenied" )
{
Console . WriteLine ( "Access denied" );
}
else if ( error . Error . Code == "nameAlreadyExists" )
{
Console . WriteLine ( "An item with this name already exists" );
}
else
{
Console . WriteLine ( $"Error: { error . Error . Message } " );
}
}
See Also
DriveItem Model DriveItem properties
Drives API Drive operations
Sites API SharePoint sites
File Upload Guide Complete upload guide