C# UnauthorizedAccessException in File.Copy
本文关键字:Copy File in UnauthorizedAccessException | 更新日期: 2023-09-27 18:29:43
我正在复习C#,所以我决定写一个程序,可以用来轻松导入我拍摄的照片。一点背景。。。我用JPEG和RAW拍摄照片,然后浏览和挑选JPEG,因为它们更小,更容易处理/预览。然后我只导入那些在后期制作中值得处理的RAW文件。
我想写一个简单的程序,从一个目录复制RAW文件,这些文件与我在另一个目录中筛选的JPEG文件相匹配。
这是代码:
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:
问题可能是无法删除或覆盖只读文件。解决方案是更改属性。
if(File.Exists(destFile))
{
File.SetAttributes(destFile, FileAttributes.Normal);
}
File.Copy(sourcePath, destFile, true);
您试图访问程序无法使用的文件。
试试看这篇旧帖子为什么访问路径被拒绝?
原来我在File.Copy中调用了错误的变量,而是试图复制路径而不是文件(derp)。现在一切正常!谢谢你的回复!