2013-09-01 14 views
6

私は自分のC#でブラッシングしていますので、私が撮った写真を簡単に読み込むためのプログラムを書くことにしました。ちょっとした背景... JPEGとRAWで写真を撮ってから、JPEGが小さくて扱いやすく/プレビューしやすいので、JPEGを選択します。私はその後、ポストプロダクションで混乱する価値のあるRAWファイルだけをインポートします。File.CopyのC#UnauthorizedAccessException

RAWファイルを別のディレクトリに移したJPEGと一致する1つのディレクトリからコピーする簡単なプログラムを作成したかったのです。ここで

は、コードは次のとおりです。

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(); 

    } 

すべてがしかし、私はファイルがあることを示しCopy.File上の例外を取得しています、私はコンソールにすべての変数を書くとき、私は期待通り動作しているようです読み取り専用。私はチェックしましたが、フォルダ自体はありませんが、私の最善の努力にもかかわらず、私のテストフォルダを読み込み専用にすることはできません。どんな助けもありがとう、私は下の例外ログを貼り付けました。

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: 
+0

Windowsエクスプローラ? –

+0

はい、正しいです。 – user2736424

+0

フォルダのプロパティでセキュリティ権限をチェックしましたか? –

答えて

10

読み取り専用ファイルを削除または上書きできないという問題があります。 解決方法は属性を変更することです。

if(File.Exists(destFile)) 
{ 
    File.SetAttributes(destFile, FileAttributes.Normal); 
} 
File.Copy(sourcePath, destFile, true); 
2

を見て試してみてください、私はFile.Copyで間違った変数を呼んでいた、そして代わりに、代わりにファイル(DERP)のパスをコピーしようとしていたが判明しました。すべてが今働きます!返信ありがとう!

関連する問題