Windows 8에서 F #으로 구문 분석해야하는 대용량 로그 파일이 있습니다. 새 행을 추가하여 로그 파일의 끝에 쓰는 서버가 계속 실행 중입니다. 로그 파일은 매분마다 변경 사항을 확인합니다. 전체 파일을 다시 구문 분석하는 대신 끝에 읽은 다음 새로 추가 된 행을 이전 구문 분석의 결과와 결합하는 것이 좋습니다. 더 나은 아직, 나는 파일을 변경할 때마다 콜백을 등록 할 수 있기를 원합니다. 그게 가능하니?대용량 파일 처리
1
A
답변
1
파일 스트림을 통해 Seek()
이 가능합니다. 이런 식으로 뭔가 : 나는 아래로 추적 할 수 없습니다 오류 "가 다른 시저에서 사용 중이기 때문에 프로세스가 파일을 액세스 할 수 없습니다"
open System.IO
let WatchLog directory file =
// Keep track of last read position
let lastRead = ref 0L
// Function that's called whenever the file changes
let processLog (e : FileSystemEventArgs) =
// Open file, and seek to the last read location
use fs = new FileStream(Path.Combine(directory, file), FileMode.Open, FileAccess.Read)
fs.Seek(!lastRead, SeekOrigin.Begin) |> ignore
// Read the rest of the file
use sr = new StreamReader(fs)
printfn "Reading log: %A" (sr.ReadToEnd())
// Store the length so that we know how much to seek over next time
lastRead := fs.Length
()
// Create a FS watched to be notified when a file changes
let fs = new FileSystemWatcher(directory, file)
fs.Changed.Add(processLog)
fs.EnableRaisingEvents <- true
WatchLog "M:\Coding\" "TestLog.txt"
그러나, 어떤 이유로, 내 컴퓨터에서 나는 얻을. use
문은 범위를 벗어나면 처분해야하며 Close
에 대한 명시 적 호출로도 문제가 해결되지 않습니다./
+2
다른 스레드 또는 프로세스에서이 작업을 수행하는 경우 해당 메시지가 필요합니다. . 끝에 하나 더 많은 매개 변수를 추가하십시오. ", FileMode.Open, FileAccess.Read, FileShare.ReadWrite) - 수정해야하지만 작성자도 공유해야합니다 (테스트하지 않았습니다). –
관련 문제
- 1. 대용량 파일 처리
- 2. C에서 대용량 텍스트 파일 처리
- 3. stream_filter_ *를 사용하여 PHP에서 대용량 파일 처리 (
- 4. PHP를 사용하여 서버에서 대용량 파일 처리
- 5. Mathematica에서 대용량 데이터 처리
- 6. 대용량 페이지로드 처리
- 7. 레일에서 대용량 레코드 세트 처리
- 8. 체크 아웃시 대용량 디렉토리 처리
- 9. Crystal Reports의 대용량 데이터 처리
- 10. MySQL의 대용량 데이터 조작 처리
- 11. 대용량 데이터베이스 처리 방법을 모르겠다
- 12. 청크로 libxml-ruby 청크로 대용량 XML 파일 처리
- 13. .NET Webservice 대용량 파일 처리 중 스레드가 중단되었습니다.
- 14. Django : 대용량 파일 업로드 - mod_wsgi로 사용자 정의 처리
- 15. 대용량 CSV 파일 작업 프로그램
- 16. Ruby를 사용하여 대용량 파일 업로드
- 17. HttpClient로 대용량 파일 다운로드
- 18. 하스켈에서 대용량 파일 다루기
- 19. 대용량 파일 지원
- 20. AFNetworking으로 대용량 파일 업로드?
- 21. git에서 대용량 파일 거부
- 22. Django 대용량 파일 전송
- 23. swfbridge 및 대용량 파일
- 24. 코코아에서 대용량 파일 수정
- 25. WCF 스트리밍 대용량 파일
- 26. 대용량 파일 업로드가 실패합니다.
- 27. 대용량 파일 검색 알고리즘
- 28. 대용량 파일 업로드
- 29. 대용량 파일 업로드
- 30. CodeIgniter 대용량 파일 업로드
물론 끝 부분에 쓰는 서버를 다시 구성하는 것이 가장 이상적입니다 (서버가 log4net 또는 Trace API를 사용하는 경우 너무 열심히해서는 안됩니다.) ... –
그래, 좋을거야. 불행히도 서버는 소스가없는 .exe 일뿐입니다. –
[FileSystemWatcher] (http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx)를 사용하여 처리기를 트리거 할 수 있습니다. 핸들러는 마지막으로 액세스 한 오프셋 (또는 이전 파일 크기)을 기억하고, 거기에서'Seek()'하고 새로운 라인을 읽습니다. 액세스 충돌이 발생하지 않도록 파일을 올바르게 여는 데주의를 기울이십시오. 또한 서 v가 쓰기 위해 파일을 여는 f}에 따라 다 (니다. – bytebuster