2013-04-11 1 views
2

나는 다음과 같은 C# 코드가 : 코드 ftp.upload를 실행하려고하면C# 파일 액세스 오류

string selectedFile = "D:\..\IMGP2695.JPG"; 
MyImage myImage = new MyImage(); 
Image image = Image.FromFile(selectedFile); 
string thumbnail_name = CreateThumbnail(image); 
myImage.height = image.Height + "px"; 
myImage.width = image.Width + "px"; 
ftp.upload(myImage.internalName, selectedFile, directory); 


The process cannot access the file `'D:\..\IMGP2695.JPG'` because it is being used by another process. 

나는이 오류가 발생합니다. 오류의 의미는 무엇인지 알지만 열린 파일의 핸들을 닫으려면 어떻게해야할지 모르겠다.

+1

왜 먼저 그것을 열고있다? –

+0

파일은 OpenFileDialog의 결과입니다. 나는 그것을 명시 적으로 열지 않는다. –

답변

2

시도 usingImage.FromFile 포장하여 이미지 객체 dispose에 :

string selectedFile = "D:\..\IMGP2695.JPG"; 
MyImage myImage = new MyImage(); 
string thumbnail_name = string.empty; 
using(Image image = Image.FromFile(selectedFile)){ 
    thumbnail_name = CreateThumbnail(image); 
    myImage.height = image.Height + "px"; 
    myImage.width = image.Width + "px"; 
} 
ftp.upload(myImage.internalName, selectedFile, directory); 
+0

"사용"을 사용해야합니다. 귀하의 예를 들어 주셔서 감사합니다. 나는 그에 따라 코드를 바꿀 것이다. –

1

Image image = Image.FromFile(selectedFile);에 전화하기 전에에 업로드하기 때문에 어떤 이유로 인해.

당신이 Image.FromFile 문서에 보면 다음과 같은 문자열이 표시됩니다

파일은 이미지가 배치 될 때까지 잠긴 남아 있습니다. 의미

, 업로드가 완료 심지어 후이 제공 한 코드에 따라, 당신은 init을 할 수 있습니다 이미지.

ftp.upload("NAME_OF_THE_FILE_RECOVERED_FROM_FILE_ITSELF", selectedFile, directory); 

Image image = Image.FromFile(selectedFile); 
+0

완벽. 지금 일하고 있습니다. 고마워. 나는 그 선을 생각하지 않았다. 죄송합니다. 다른 스레드로 이미지를 업로드하는 방법에 대한 아이디어를 줄 수 있습니까? 업로드가 완료 될 때까지 양식이 고정되어있어 좋지 않습니다. –