title: C# UnauthorizedAccessException in File.Copy
body: <p>I am brushing up on my C# so I decided to write a program that I can use to easily import photos that I take.  A little background...I shoot photos in JPEG and RAW and then go through and pick through the JPEGs since they are smaller and easier to handle/preview.  I then import only those RAW files that are worth messing with in post production.  </p>
  
  <p>I wanted to write a simple program to copy the RAW files from one directory that match the JPEGs that I've sifted through in another.  </p>
  
  <p>Here is the code: </p>
  
  <pre><code>static void Main(string[] args)
      {
          Console.WriteLine("Enter the JPEG Origin Directory: "); 
          string originDirectory = @"C:\Users\Greg\Pictures\Summer 2013\Back Bay\testJPEG";
  
          Console.WriteLine("Enter the RAW Origin Directory: ");
          string copyDirectory = @"C:\Users\Greg\Pictures\Summer 2013\Back Bay\testRAW";
  
          Console.WriteLine("Enter the RAW Import Directory: ");
          string rawCopyDirectory = @"C:\Users\Greg\Pictures\Summer 2013\Back Bay\testRAWImport"; 
  
          char[] delimiterChars = { '_', '.' };
  
          List&lt;string&gt; filesToCopy = new List&lt;string&gt;();
          List&lt;string&gt; CopiedFiles = new List&lt;string&gt;(); 
  
          foreach (var filePath in Directory.GetFiles(originDirectory))
          {
              Console.WriteLine("Filepath: '{0}'", filePath);
              string[] words = filePath.Split(delimiterChars);
  
              filesToCopy.Add(words[1]); 
          }
  
          filesToCopy.ForEach(Console.WriteLine);
  
          foreach (var copyFilePath in Directory.GetFiles(copyDirectory))
          {
            string[] delimited = copyFilePath.Split(delimiterChars);     
  
            if (filesToCopy.Contains(delimited[1]))
            {
                Console.WriteLine("Copied: '{0}'", copyFilePath);
  
                string fileName = Path.GetFileName(copyFilePath);
  
                string sourcePath = Path.GetDirectoryName(copyFilePath);
  
                string targetPath = rawCopyDirectory;
  
                string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
  
                string destFile = System.IO.Path.Combine(targetPath, fileName);
  
  
               System.IO.File.Copy(sourcePath, destFile, true); 
  
            }
  
  
          }
  
          Console.WriteLine("Press any key to exit.");
          Console.ReadKey();
  
      }
  </code></pre>
  
  <p>Everything seems to be working as I'd expect when I write all the variables to the console, however I'm getting an exception on <code>Copy.File</code> that indicates the files are read only. I checked, and they aren't, however the folder itself is, and despite my best efforts I cannot unflag my test folders as readonly.  Any help would be appreciated, I've pasted the exception log below.</p>
  
  <pre><code>System.UnauthorizedAccessException was unhandled
    HResult=-2147024891
    Message=Access to the path 'C:\Users\Greg\Pictures\Summer 2013\Back Bay\testRAW' is denied.
    Source=mscorlib
    StackTrace:
         at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
         at System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite, Boolean checkHost)
         at System.IO.File.Copy(String sourceFileName, String destFileName, Boolean overwrite)
         at ConsoleApplication1.Program.Main(String[] args) in C:\Users\Greg\documents\visual studio 2010\Projects\Photo Importer\Photo Importer\photoImporter.cs:line 56
         at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
         at System.AppDomain.nExecuteAssembly(RuntimeAssembly assembly, String[] args)
         at System.Runtime.Hosting.ManifestRunner.Run(Boolean checkAptModel)
         at System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly()
         at System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String[] activationCustomData)
         at System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext)
         at System.Activator.CreateInstance(ActivationContext activationContext)
         at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone()
         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>