Мне нужно запустить скрипт на удаленном сервере, на котором есть база данных Oracle

Вы хотите открыть FileStream в двоичном режиме. Периодически ищите конец файла минус 1024 байта (или что-то еще), затем читайте до конца и выводите. Вот как работает tail -f.

Отвечает на ваши вопросы:

Двоично, потому что трудно случайно получить доступ к файлу, если вы читаете его как текст. Вы должны сами выполнить преобразование двоичного текста, но это не сложно. (См. Ниже)

1024 байта, потому что это приятное удобное число и должно обрабатывать 10 или 15 строк текста.

Вот пример открытия файла, чтения последних 1024 байтов и преобразования его в текст:

static void ReadTail(string filename)
{
    using (FileStream fs = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
    {
        // Seek 1024 bytes from the end of the file
        fs.Seek(-1024, SeekOrigin.End);
        // read 1024 bytes
        byte[] bytes = new byte[1024];
        fs.Read(bytes, 0, 1024);
        // Convert bytes to string
        string s = Encoding.Default.GetString(bytes);
        // or string s = Encoding.UTF8.GetString(bytes);
        // and output to console
        Console.WriteLine(s);
    }
}

Обратите внимание, что вы должны открыть с помощью FileShare.ReadWrite, так как вы пытаетесь прочитать файл, который в настоящее время открыт для записи другим процессом.

Также обратите внимание, что я использовал Encoding.Default, который в США / английском и для большинства западноевропейских языков будет 8-битным кодировка символов. Если файл написан в какой-либо другой кодировке (например, UTF-8 или другой кодировке Unicode), возможно, что байты не будут правильно преобразовываться в символы. Вам придется обработать это, определив кодировку, если вы считаете, что это будет проблемой. Поиск переполнения стека для информации об определении текстовой кодировки файла.

Если вы хотите делать это периодически (например, каждые 15 секунд), вы можете настроить таймер, который вызывает метод ReadTail так часто как пожелаете. Вы можете немного оптимизировать ситуацию, открыв файл только один раз в начале программы. Это зависит от вас.

0
задан Jordan Bagwell 18 March 2019 в 19:05
поделиться