2012-05-18 2 views
1

FileInfoLength 속성에 매우 이상한 문제가 있습니다. 나는 파일 (주로 이미지)을 클라이언트에게 보내는 호출에 응답하는 서버를 작성하고 있습니다. 실제 파일을 보내기 전에 파일 크기를 클라이언트에 보내려고합니다. FileInfo을 사용하여 파일 크기를 찾고 있지만 이상하게도 올바른 크기를 매번 제공하지 않습니다. 다르게 말하자면 동일한 파일에 대해 크기가 다르거 나 때로는 실제 크기보다 작고 때로는 정확합니다 (그러나 실제 크기보다 크지는 않습니다). 문제가 더욱 이상하게 생기는 이유는 동일한 코드를 새 프로젝트 (서버가 아닌 테스트 프로젝트)에 복사하면 제대로 작동하고 올바른 대답을 얻을 수 있기 때문입니다. 서버는 여러 클라이언트가 연결할 수 있도록 스레드를 사용합니다 (테스트 프로젝트는 그렇지 않습니다). 그러나 이것은 FileInfo과 관련이 없습니다. 여기 내 코드 :FileInfo.Length가 올바른 파일 크기를 항상 제공하지 않습니다.

String fullFilePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\" + imageName; 
FileInfo file1 = new FileInfo(fullFilePath); 
Console.Writeline("File Size: {0}", file1.Length); 

매우 기본적인 코드! 내 이미지는 4 ~ 10KB 범위에서만 작습니다. 내가 뭔가 잘못하고 있는거야? 어떤 제안?

+0

실제 크기는 어떻게 측정합니까? – SLaks

+0

한 번에 하나씩 특정 파일에 대한 파일 정보 만 요청하도록 서버를 제한해야하는 것처럼 들립니다. – Tejs

+0

@SLaks 나는 실제 크기를 3 가지 방법으로 측정하고있다 : (1) 파일을'byte' 배열에로드 할 때 올바른 크기를 준다. (2) 클라이언트에서 디스크의 크기를 측정한다. (3) on 서버에 대한 액세스 권한이 있으므로 간단히 파일을 마우스 오른쪽 단추로 클릭하고 속성을 읽습니다. – antf

답변

1

나는 결국 그것을 얻었다! 문제가 FileInfo 클래스에 없으므로 문제는 내 클라이언트 서버 통신의 개념 문제였습니다. 원래 이미지는 서버에 없으며 다른 클라이언트에서 온 것입니다. 무슨 일이 있었는지 클라이언트가 서버에 이미지를 보내고이 이미지를 가져 오기 요청이 다른 클라이언트의 서버에 도달했지만 전에 전에 서버가 실제로 이미지를 디스크에 저장하는 것을 마쳤습니다. 따라서 FileInfo은 파일의 총 바이트가 아닌 현재 저장된 바이트 중 Length을 가져오고있었습니다.

해결책은 다음과 같습니다. 파일을 서버로 보내면 다른 클라이언트가이 파일을 다운로드 할 준비가되기 전에 서버가 저장 프로세스를 마칠 때까지 약간의 시간 (예 : 1 초)을 허용합니다.

관련 문제