123456789101112131415161718192021222324252627282930313233343536373839404142 |
- using System.IO;
- namespace WinSCP
- {
- internal class PatientFileStream : FileStream
- {
- public PatientFileStream(Session session, string path, FileMode mode, FileAccess access, FileShare share) :
- base(path, mode, access, share)
- {
- _session = session;
- }
- public override int Read(byte[] array, int offset, int count)
- {
- int result;
- int interval = 50;
- do
- {
- result = base.Read(array, offset, count);
- if (result == 0)
- {
- _session.Logger.WriteLine("Waiting for log update and dispatching events for {0}", interval);
- _session.DispatchEvents(interval);
- _session.CheckForTimeout();
- if (interval < 500)
- {
- interval *= 2;
- }
- }
- }
- // We always want to return something.
- // No attempt to detect end real of file is needed,
- // as we should not try to read beyond the final closing tag
- while (result == 0);
- return result;
- }
- private Session _session;
- }
- }
|