2012-04-10 4 views
2

을 작동시킬 수없는, 그건 그냥 작동하지 않습니다File.Copy이 다른 파일 위치, Microsoft에서 코드 샘플입니다

string fileName = "test1.txt"; 
string sourcePath = @"C:\"; 
string targetPath = @"C:\Test\"; 

// Use Path class to manipulate file and directory paths. 
string sourceFile = System.IO.Path.Combine(sourcePath, fileName); 
string destFile = System.IO.Path.Combine(targetPath, fileName); 

System.IO.File.Copy(sourceFile, destFile, true); 

이 소스를 찾을 수 없습니다 파일. 내가 브레이크 포인트를 설정하면, 이것은 내가 무엇을 얻을 수 있습니다 : 그대로 문자열을 사용하는 경우에도 백 슬래시를 두 배로처럼

args {string[0]} string[] 
    fileName "test1.txt" string 
    sourcePath "C:\\" string 
    targetPath "C:\\Test\\" string 
    sourceFile "C:\\test1.txt" string 
    destFile "C:\\Test\\test1.txt" string 

그래서이 보인다. (내가 C에서 test1.txt 파일을 가지고 있다는 것은 의심의 여지가 없다 :) 어떤 아이디어? 감사!

+3

예외 메시지 및 스택 추적이란 무엇입니까? – SLaks

+3

백 슬래시를 두 배로 늘리는 것은 디스플레이 용입니다. 어떤 오류 메시지가 나타 납니까? –

+0

예외 텍스트를 게시 하시겠습니까? 두 개의 백 슬래시가 좋습니다. – Matten

답변

0

두배가 올바른지, 나는 당신의 문제가 파일 이름이라고 생각합니다. 그 작업을하지 않고 파일을 읽으려고 시도하지만, 파일 이름이 test1.txt.txt 여야하는 경우 "알려진 유형의 Extenstions 숨기기"가 있는지 확인하기 전에 확인하십시오.

+0

고맙습니다. 감사합니다. 그게 문제였습니다 !!! – MariusD

3

이중 백 슬래시는 문자열에서 백 슬래시를 나타내는 일반적인 방법입니다. @를 사용하면 어떤 이스케이프 시퀀스도 해석하고 싶지 않다는 의미입니다 (특히 "Literals"에서 here을 참조하십시오)

그래서 문제가 다릅니다. C : \ test1.txt와 C : \ Test가 존재합니까? targetPath에 쓸 수있는 권한이 있습니까?

는 시도

if (!Directory.Exists(targetPath)) { 
    Directory.CreateDirectory(targetPath); 
} 
if (File.Exists(sourceFile)) { 
    File.Copy(sourceFile,destFile,true); 
} 
+1

분명히 이것은 의견이지 대답이 아닙니다!? – SkonJeet

+0

그것은 최고 득표 답변과 같은 제안을하고 있습니다 ... 그리고 이중 백 슬래시를 더 자세히 설명합니다. –

+0

David Heffernan이 문제의 가능한 모든 원인을 다뤘습니다 - 그렇게하기 위해 OP에서 추가 정보를 요청하고 있습니다. 이 문제가 액세스 문제 일 수 있음을 언급하지 못했습니다. OP의 의견에있는 다른 모든 사람들이 당신의 '대답'에있는 모든 것을 다루었지만, 올바른 것으로 표시되기 위해 담당자를 얻을 기회가 없습니다. 공정하지 않은 것 같습니다. – SkonJeet

5

3 개 일반적인 고장 모드가 있습니다 (필요에 따라 체크 예외 처리 및 더 많은 오류를 추가) 다음

  1. 소스 파일 C:\test1.txt이 존재하지 않습니다.
  2. 대상 파일 C:\Test\test1.txt이 있지만 읽기 전용입니다.
  3. 대상 디렉터리 C:\Test이 존재하지 않습니다.

내 생각 엔 항목 3이 문제이며, 그렇다면 File.Copy에 전화하기 전에 대상 디렉토리가 존재하는지 확인해야합니다. 이 경우 DirectoryNotFoundException이 표시됩니다. Directory.CreateDirectory을 사용하여 대상 디렉토리가 존재하는지 확인할 수 있습니다.

+0

4. C : \가 존재하지 않거나 액세스 할 수 없습니다 (알지 못할 가능성이 있음) – SkonJeet

+1

@SkonJeet 항목 1이 이러한 가능성을 설명합니다. –

+0

참 true, +1 .. – SkonJeet

0

당신이 문제의 시도를 가진이 예를 살펴 경우 :

using System; 
using System.IO; 
class Test 
{ 
    public static void Main() 
    { 
     string path = @"c:\temp\MyTest.txt"; 
     string path2 = path + "temp"; 

     try 
     { 
      // Create the file and clean up handles. 
      using (FileStream fs = File.Create(path)) {} 

      // Ensure that the target does not exist. 
      File.Delete(path2); 

      // Copy the file. 
      File.Copy(path, path2); 
      Console.WriteLine("{0} copied to {1}", path, path2); 

      // Try to copy the same file again, which should succeed. 
      File.Copy(path, path2, true); 
      Console.WriteLine("The second Copy operation succeeded, which was expected."); 
     } 

     catch 
     { 
      Console.WriteLine("Double copy is not allowed, which was not expected."); 
     } 
    } 
} 

부터 촬영 : 백 슬래시의 http://msdn.microsoft.com/en-us/library/system.io.file.copy(v=vs.71).aspx

0

정확히 무엇이 잘못되는지 보려면, try-catch 블록의 코드 :

try { // Code that can throw an exception } 
catch (Exception ex) 
{ 
    // Show what went wrong 
    // Use Console.Write() if you are using a console 
    MessageBox.Show(ex.Message, "Error!"); 
} 

가능성이 가장 높은 문제가 누락 된 소스 파일이다는 대상 폴더가 존재하지 않거나, 해당 위치에 액세스 할 수있는 권한이 없습니다.

Windows 7에서는 운영 체제가 설치된 드라이브의 루트 (보통 c:\)에 직접 쓰기 위해 관리자 권한이 필요합니다. 파일을 쓰거나 해당 위치에 디렉토리를 만들려고하면 실패 할 수 있으므로 다른 위치를 사용하는 것이 좋습니다.