Импортный клочок не идет хорошо?

Чтобы постоянно отслеживать хвост файла, вам просто нужно запомнить длину файла раньше.

public static void MonitorTailOfFile(string filePath)
{
    var initialFileSize = new FileInfo(filePath).Length;
    var lastReadLength = initialFileSize - 1024;
    if (lastReadLength < 0) lastReadLength = 0;

    while (true)
    {
        try
        {
            var fileSize = new FileInfo(filePath).Length;
            if (fileSize > lastReadLength)
            {
                using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                {
                    fs.Seek(lastReadLength, SeekOrigin.Begin);
                    var buffer = new byte[1024];

                    while (true)
                    {
                        var bytesRead = fs.Read(buffer, 0, buffer.Length);
                        lastReadLength += bytesRead;

                        if (bytesRead == 0)
                            break;

                        var text = ASCIIEncoding.ASCII.GetString(buffer, 0, bytesRead);

                        Console.Write(text);
                    }
                }
            }
        }
        catch { }

        Thread.Sleep(1000);
    }
}

Мне пришлось использовать ASCIIEncoding, потому что этот код недостаточно умен, чтобы обслуживать для переменных длин символов UTF8 на границах буфера.

Примечание. Вы можете изменить часть Thread.Sleep на разные тайминги, а также вы можете связать ее с файловым и шаблоном блокировки - Monitor.Enter / Wait /Пульс. Для меня достаточно таймера и, самое большее, он проверяет длину файла каждую секунду, если файл не изменился.

-1
задан DavidG 18 January 2019 в 11:28
поделиться

1 ответ

Самое простое решение было бы переустановить NumPy.

Откройте командную строку и введите:

pip3 uninstall numpy

или

pip uninstall numpy

для Python 2,

затем

pip install numpy

0
ответ дан Nika Narushvili 18 January 2019 в 11:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: