2010-03-06 4 views
1

나는 드롭 상자로 전송되는 비디오를 코드 변환 할 응용 프로그램을 만들고 있습니다. 동영상은 보관 용 계정으로 보내려면 몇 분에서 몇 시간 정도 걸릴 수 있으므로 앱이 처리하기 전에 파일을 작성해야합니다.Ruby File.size? 파일 크기를 캐시하는 것 같습니다

이 작업을 수행하는 가장 쉬운 방법은 보관 용 계정을 색인하는 데몬이 통과 할 때마다 파일 크기를 확인하는 것입니다. 파일 크기가 둘 이상의 패스에서 동일하게 유지되면 응용 프로그램은 파일 작성이 완료되었다고 추측 할 수 있습니다.

그러나 나는이 응용 프로그램에 대한 레일 콘솔에서 엉망이 될 때 파일 크기가 캐시되고있는 것처럼 보입니다. 비디오 파일을 드롭 박스 디렉토리로 내보낼 때이 것을 볼 수 있습니다. OS X 10.6 파인더에서 파일 크기는 비디오가 쓰여지는 동안 지속적으로 업데이트됩니다. File.size를 어떻게 실행합니까? 작성중인 파일에서 무작위로 업데이트 될 때까지 동일한 크기가 반복적으로 나타납니다. 아래는 몇 가지 샘플 출력입니다. File.size를 실행하고 있습니까? 방법 약 1 초.

내가 누락 된 자료가 있습니까?

감사합니다.

File.size?("/Volumes/FCP_Edit/ProgramingDropBox/test.mov") 
=> 95053324 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/test.mov") 
=> 95053324 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 23769068 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 23769068 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 23769068 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 23769068 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 23769068 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 23769068 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 64888832 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 64888832 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 64888832 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 64888832 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 64888832 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 64888832 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 64888832 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 64888832 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 123609088 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 336691200 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 336691200 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 336691200 
>> File.size?("/Volumes/FCP_Edit/ProgramingDropBox/dumb.mov") 
=> 336691200 

답변

0

루비에 사용 아니지만, 그것은 디스크가있는 공간, 바이트가 아니라 실제 크기와 파일 크기를 읽는 것 같습니다.

모든 파일은 일반적으로 디스크의 적어도 하나의 섹터를 차지하므로 실제 파일 크기가 1 바이트이면 상관 없습니다.

실제 파일 크기를 읽는 더 좋은 해결책을 문서를 통해 검색하는 것이 좋습니다.

0

그럼 왜 여전히 File.size를 모르겠습니까? 메서드가 올바른 크기를 얻지 못했지만 시스템을 호출하여 찾았습니다. du <filename> 명령을 호출 할 때마다 업데이트 된 파일 크기가 표시됩니다.

그래서 기본적으로 내가 뭘하는지입니다 :이 명령은 두 번 같은 문자열을 반환

IO.popen("du <filename>").readlines.first 

경우에, 나는 파일이 더 이상에 기록되지 않는 것을 알고있다.

누구든지이 문제를 해결하는 방법을 더 잘 알고 있다면 나는 그것을 듣고 싶습니다.

+0

결론을 내리기 위해서는 버퍼를 다른 쪽 끝으로 플러시해야 할 것입니다. 아마'lsof'를 검사하는 것이 더 좋은 해결책 일 것입니다. – strager

관련 문제