title: Set Item Permissions
body: <p><strong>Folders work:</strong></p>
  
  <p>I now know how to set the permissions of a folder in a library:</p>
  
  <pre><code>public void ChangeItemPermissions()
  {
      _SharePoint.ClientContext _ClientContext = new _SharePoint.ClientContext("https://sharepoint.oshirowanen.com/sites/oshirodev/");
      _ClientContext.Credentials = new NetworkCredential("user", "pass", "oshirowanen.com");
  
      _SharePoint.Principal user = _ClientContext.Web.EnsureUser(@"oshirowanen\tom");
  
      var _List = _ClientContext.Web.Lists.GetByTitle("Library1");
      var _Item = _List.LoadItemByUrl("/sites/oshirodev/Library1/Folder1");
      var roleDefinition = _ClientContext.Site.RootWeb.RoleDefinitions.GetByType(_SharePoint.RoleType.Reader);
      var roleBindings = new _SharePoint.RoleDefinitionBindingCollection(_ClientContext) { roleDefinition };
      _Item.BreakRoleInheritance(false,true);
      _Item.RoleAssignments.Add(user, roleBindings);
  
      _ClientContext.ExecuteQuery();
  }
  </code></pre>
  
  <hr>
  
  <p><strong>File attempt:</strong></p>
  
  <p>I've tried adding the file name to this line:</p>
  
  <p><code>var _Item = _List.LoadItemByUrl("/sites/oshirodev/Library1/Folder1/File1.docx");</code></p>
  
  <p>Notice the (<strong>/File1.docx</strong>) added to the end of the above line.</p>
  
  <hr>
  
  <p><strong>Error received:</strong></p>
  
  <p>But that just gives an error:</p>
  
  <pre><code>System.NullReferenceException was unhandled
    HResult=-2147467261
    Message=Object reference not set to an instance of an object.
    Source=ItemPermissions
    StackTrace:
         at ItemPermissions.Form1.ChangeItemPermissions() in c:\Users\Oshirowanen\Documents\Visual Studio 2013\Projects\ItemPermissions\ItemPermissions\Form1.cs:line 46
         at ItemPermissions.Form1.button1_Click(Object sender, EventArgs e) in c:\Users\Oshirowanen\Documents\Visual Studio 2013\Projects\ItemPermissions\ItemPermissions\Form1.cs:line 345
         at System.Windows.Forms.Control.OnClick(EventArgs e)
         at System.Windows.Forms.Button.OnClick(EventArgs e)
         at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
         at System.Windows.Forms.Control.WmMouseUp(Message&amp; m, MouseButtons button, Int32 clicks)
         at System.Windows.Forms.Control.WndProc(Message&amp; m)
         at System.Windows.Forms.ButtonBase.WndProc(Message&amp; m)
         at System.Windows.Forms.Button.WndProc(Message&amp; m)
         at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&amp; m)
         at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&amp; m)
         at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
         at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG&amp; msg)
         at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
         at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
         at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
         at System.Windows.Forms.Application.Run(Form mainForm)
         at ItemPermissions.Program.Main() in c:\Users\Oshirowanen\Documents\Visual Studio 2013\Projects\ItemPermissions\ItemPermissions\Program.cs:line 18
         at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
         at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
         at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
         at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
         at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
         at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
         at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
         at System.Threading.ThreadHelper.ThreadStart()
    InnerException: 
  </code></pre>
  
  <hr>
  
  <p><strong>Relevant info:</strong></p>
  
  <p>This is a WinForm app running on a local machine, created with C#, using .NET 4.0.  SharePoint version is 2010.</p>
  
  <hr>
  
  <p><strong>The question:</strong></p>
  
  <p>How do I set the permissions for a specific <strong>file</strong>?  As I already know how to set permissions for a specific <strong>folder</strong>.</p>