2013-09-01 7 views
6

मैं अपने सी # पर ब्रश कर रहा हूं इसलिए मैंने एक ऐसा प्रोग्राम लिखने का फैसला किया जिसे मैं आसानी से फ़ोटो आयात करने के लिए उपयोग कर सकता हूं। एक छोटी सी पृष्ठभूमि ... मैं जेपीईजी और रॉ में फोटो शूट करता हूं और फिर जेपीईजी के माध्यम से जाता हूं और वे हैंडल/पूर्वावलोकन करने के लिए छोटे और आसान होते हैं। मैं फिर उन रॉ फ़ाइलों को आयात करता हूं जो पोस्ट उत्पादन में गड़बड़ी करने योग्य हैं।सी # फ़ाइल में अनधिकृत एक्सेस अपवाद। कॉपीराइट

मैं एक ऐसी निर्देशिका से रॉ फ़ाइलों को कॉपी करने के लिए एक सरल प्रोग्राम लिखना चाहता था जो जेपीईजी से मेल खाता है जिसे मैंने दूसरे में घुमाया है।

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

विंडोज एक्सप्लोरर? –

+0

हाँ, यह सही है। – user2736424

+0

क्या आपने फ़ोल्डर की संपत्तियों पर सुरक्षा अनुमतियां जांच ली हैं? –

उत्तर

2

आप अपने प्रोग्राम का उपयोग करने के बाहर फ़ाइल तक पहुंचने का प्रयास कर रहे हैं। इस पुराने पोस्ट Why is access to the path denied?

10

समस्या यह हो सकती है कि आप केवल-पढ़ने वाली फ़ाइलों को हटा या ओवरराइट नहीं कर सकते। समाधान गुणों को बदलने के लिए है।

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

बाहर कर देता है मैं File.Copy में गलत चर बुला रहा था, और बजाय एक फ़ाइल (Derp) के बजाय एक पथ कॉपी करने के लिए कोशिश कर रहा था

में देखने का प्रयास। सब कुछ अब काम करता है! जवाब के लिए धन्यवाद!

संबंधित मुद्दे