I clean my C #, so I decided to write a program that I can use to easily import the photos that I take. A bit of background ... I take JPEG and RAW photos and then browse and browse JPEG files as they are smaller and easier to process / view. Then I import only those RAW files that are worth entering into post-production.
I wanted to write a simple program for copying RAW files from one directory corresponding to JPEG files that I sifted in another.
Here is the 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<string> filesToCopy = new List<string>(); List<string> CopiedFiles = new List<string>(); 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(); }
Everything seems to work as I expected when I write all the variables to the console, but I get an exception in Copy.File , which indicates that the files are read-only. I checked, but they are not, however the folder itself, and despite all my efforts, I canβt untie my test folders as soon as they are read. Any help would be appreciated, I inserted the exception log below.
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: