2017-05-08 3 views
1

File.Copy에 문제가 발생하기 시작했습니다. 이 문제는 내 데이터 작성 스크립트에서 문제없이 문제없이 수천 개의 파일을 복제 할 수 있습니다. 내 문제는 나중에 내 코드에서 임시 파일을 만들려고 할 때 발생합니다.File.Copy 무단 액세스 C#

제대로 작동하지 않는 코드 샘플을 아래에 추가했습니다. 이 문제를 해결하기 위해 여러 가지 방법을 시도했습니다. 내가하고있는 일은 C 드라이브의 디렉토리에 생성 된 일부 사용자 데이터 파일을 해당 사용자 데이터 폴더 내의 임시 폴더에 복사하는 것입니다.

코드

foreach (string originalFile in OriginalDataFileNames) 
{ 
    string tempFile = originalFile; 
    TempDataFiles.Add(tempFile); 
    Console.WriteLine("GlobalDataCtrl: Original Data File: " + XWSDataDirectory + "\\" + tempFile); 
    Console.WriteLine("GlobalDataCtrl: Saved Temp Data File: " + tempPath + "\\" + tempFile); 
    File.Copy(XWSDataDirectory + "\\" + originalFile, tempPath + "\\" + tempFile); 
} 

종료 오류가

The program '[6256] XtremeWrestlingSim.vshost.exe' has exited with code -1073741819 (0xc0000005) 'Access violation'. 

어떤 도움 사전에 감사합니다 감사합니다!

해결책 :

FileStream outputFS = null; 
      FileStream inputFS = null; 
      outputFS = new FileStream(tempPath + "\\" + tempFile, FileMode.CreateNew, FileAccess.ReadWrite); 
      using (inputFS = new FileStream(XWSDataDirectory + "\\" + originalFile, FileMode.Open)) 
      { 
       inputFS.CopyTo(outputFS); 
      } 
      outputFS.Close(); 
      inputFS.Close(); 

하지 않음이 얼마나 잘 포맷해야합니다,하지만 작동합니다. File.Copy을 위 코드로 바꾸십시오.

+1

비고? 파일 핸들을 어딘가에 닫지 않을 가능성이 있습니다. 파일을 쓸 때마다'using' 문을 사용하거나'.Close()'를 호출해야합니다. –

+2

[C# UnauthorizedAccessException of File.Copy] 가능한 복제본 (http://stackoverflow.com/questions/18554108/c-sharp) -unauthorizedaccessexception-in-file-copy) – krillgar

+2

새 파일 (File.Create)을 만든 다음 파일 (File.Copy) 바로 위에 기존 파일을 복사하는 이유는 무엇입니까? –

답변

4

File.Copy에 전화하기 바로 전에 File.Create을 사용하고 있습니다. 문제가 있다고 생각합니다. 공개 스트림을 남기고 있습니다.

File.Create 전화를 제거하면 문제가 해결 될 수 있습니다. 그렇지 않은 경우 반환 값 (스트림)을 가져 와서 복사하기 전에 닫을 수 있습니다.

파일은 읽기/쓰기 권한으로 열리고 다른 응용 프로그램에서 열려면 닫아야합니다.

참조하면 이러한 파일을 직접 작성 수행 한 다음 나중에 복사하려고 https://msdn.microsoft.com/en-us/library/ms143361(v=vs.110).aspx

+0

난 보통 그냥'.Close()'를 호출한다. ... File.Create (tempPath + "\\"+ tempFile) .Close(); ' –

+0

고마워! 방금 복사 대신 파일 스트림을 사용했고 매력처럼 작동했습니다. !!!! –