2014-12-27 3 views
0

다음 코드는 고정 된 파일 + 파일 경로가 내 코드에 선언되어 작동하는 것으로 이해할 때 작동합니다.FileStream을 사용하여 이상한 예외 처리

NetworkStream netStream = client.GetStream(); 
     string FileName = @"D:\John\FYL\video1.mp4"; 
     Directory.CreateDirectory(Path.GetDirectoryName(FileName)); 

     using (FileStream fs = new FileStream(FileName, FileMode.OpenOrCreate, FileAccess.Write)) 
     { 
      netStream.CopyTo(fs); 
     } 
     netStream.Close(); 
    } 

그러나이 프로토 타입에서는 실패합니다.

NetworkStream netStream = client.GetStream(); 
     // FileName is taken at run time on button click from textbox. 

     using (FileStream fs = new FileStream(@"D:\John\FYL\"+FileName, FileMode.OpenOrCreate, FileAccess.Write)) 
     { 
      netStream.CopyTo(fs); 
     } 
     netStream.Close(); 
    } 

지금은 File.Create을 사용하고 작동 실행시 FileName을 받고 다른 경우를 선택한 경우. 내가 찾아보기 대화 상자에서 실행시 저장 위치를 ​​얻을 수 있지만 있기 때문에

FileStream output = File.Create(@"D:\John\" + FileName) 

내가 의심 해요 난 내 로컬 드라이브에 대한 보안 설정을 변경하더라도 FileStream fs = new FileStream(@"D:\John\FYL\+FileNameSystem.IO.DirectoryNotFoundExceptionSystem.UnauthorizedAcessException 같은 예외가 발생하는 이유.

이 코드에 영향을주는 스레드는 런타임에로드되는 코드의 일부이며 클릭 이벤트입니까?

답변

1

파일을 만들기 전에 디렉토리가 존재하는지 확인해야합니다.

NetworkStream netStream = client.GetStream(); 

if (!Directory.Exists(@"D:\John\FYL\" + FileName)) { 
    Directory.CreateDirectory(@"D:\John\FYL\" + FileName); 
} 

using (FileStream fs = new 
    FileStream(@"D:\John\FYL\" + FileName, FileMode.OpenOrCreate, FileAccess.Write)) 
{ 
    netStream.CopyTo(fs); 
} 

netStream.Close(); 

는 또한 변수 FileName가 제대로 포맷되어 있는지 확인 할 수 있습니다. 후행 백 슬래시 "D:\John\FYL\"을 이미 제공하고 있으므로 FileName\File1.mp4이 아닌지 확인하십시오. 이는 "D:\John\FYL\\File1.mp4"으로 연결되며 올바르지 않습니다.

+0

이 코드는 form_load()에서 시작된 스레드에서 사용하고 있습니다.이 스크립트는 browse_click이'FileStream()'을 (를) 만들 때까지 기다려야합니까? – Khan

+0

Btw가 반환 한 내용'mscorlib.dll에서 'System.IO.DirectoryNotFoundException'형식의 처리되지 않은 예외가 발생했습니다. 추가 정보 : 'D : \ John \ FYL \'경로의 일부를 찾을 수 없습니다. ' – Khan

+0

@ Khan 'Browse'버튼을 클릭하기 전에 코드가 실행되었다고 말하는가? 'FileName' 변수가 아직로드되지 않았다는 것을 의미합니까? – Dan

1

FileName의 값을 살펴 보았습니까? 아마도 잘못된 값을주고 있습니다. 파일 이름에 파일 이름 만 포함되어 있으면 파일 확장자와 함께 이름을 지정해야합니다. 확장이 제공되지 않으면 프로그램은 이름을 찾을 수없는 디렉토리 확장명으로 처리합니다 .

파일 이름에 디렉토리 이름과 함께 이름이 있으면 "D : \ John \"디렉토리에 하나의 디렉토리를 연결하면됩니다. 다시 잘못된 이름입니다.