Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.97/29: Рейтинг темы: голосов - 29, средняя оценка - 4.97
0 / 0 / 0
Регистрация: 16.01.2016
Сообщений: 33

Мониторинг изменения файла с триггером

26.04.2020, 20:29. Показов 6534. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всех приветствую.

Есть файл log.txt, в который регулярно добавляются новые строки сторонней программой.
Code
1
2
3
4
5
26.04.2020 18.46.23;Текст
26.04.2020 18.48.21;Текст
26.04.2020 18.49.43;Текст
26.04.2020 18.50.43;Текст
26.04.2020 18.56.23;Текст
Нужен скрипт, который бы мониторил появление новых строк в файле, брал из строк Текст и передавал его как параметр для запуска другого скрипта (hook.cmd).

Возможно ли вообще в batch вести мониторинг изменений ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.04.2020, 20:29
Ответы с готовыми решениями:

Оптимальный мониторинг изменения файла
Здравствуйте! Сторонняя программа записывает информацию в txt файл, как можно сделать, что как только Vb обнаруживает изменения в тхт , он...

Мониторинг изменения значения
Создал приложение в windows form, вырисовывающее график функции. Хочу добиться того, чтобы при изменении значений переменных посредством...

Мониторинг изменения файлов
Доброго времени суток! Заранее извиняюсь, если тема была уже затронута, но найти именно то, что нужно тут ее я не смог! Проблема в...

39
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
26.04.2020, 23:07
Цитата Сообщение от cyberdee Посмотреть сообщение
Нужен скрипт, который бы мониторил появление новых строк в файле, брал из строк Текст и передавал его как параметр для запуска другого скрипта (hook.cmd).
Добрый вечер! Пробуйте:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
echo START>1.txt
:step_1
for /f "tokens=2 delims=;" %%a in ('findstr /b /c:"%date%" "log.txt"') do (
    set "string=%%a"
)
findstr /l /c:"%string%" "1.txt"
if %errorlevel%==0 (
    goto step_1
) else (
    echo %string%>1.txt
    start hook.cmd "%string%"
    goto step_1
)
Кстати, текст в кириллице или латинице?

Добавлено через 17 минут
В данном скрипте периодичность проверки не задана, он в рамках бесконечного цикла проверяет файл log.txt. Наверное, правильно бы было задать хотя бы какой-то интервал секунд в 20-30, но это на Ваше усмотрение

Добавлено через 8 минут
Лучше так:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
echo START>1.txt
:step_1
for /f "tokens=2 delims=;" %%a in ('findstr /b /c:"%date% %time:~,2%" "log.txt"') do (
    set "string=%%a"
)
findstr /l /c:"%string%" "1.txt"
if %errorlevel%==0 (
    goto step_1
) else (
    echo %string%>1.txt
    start hook.cmd "%string%"
    goto step_1
)
1
Эксперт NIX
3305 / 933 / 201
Регистрация: 14.01.2013
Сообщений: 4,769
27.04.2020, 07:55
Цитата Сообщение от cyberdee Посмотреть сообщение
Возможно ли вообще в batch вести мониторинг изменений ?
Если периодичность не сильно критический параметр, то возможно. Как написал Karen87. Если реагировать надо быстро, то можно настроить аудит изменения файла и по событию запускать обработчик.
0
0 / 0 / 0
Регистрация: 16.01.2016
Сообщений: 33
27.04.2020, 15:35  [ТС]
В целом вроде то что нужно, но где то в нюансах не работает. В примере выше у меня бесконечный цикл вызова hook, хоть я и не меняю ничего в log.txt.

Постараюсь детализировать задачу :

Необходимо чтобы hook.cmd вызывался для каждой новой строки, которая появляется в файле, с момента запуска мониторинга.
появилась новая строка - вытянули данные, что идут после символа ";" (это номер телефона), вызов hook, с передачей этого номера.

Файл log.txt на момент запуска может быть пустым или иметь данные, "старые" строки никуда не передаются, важно что появится нового.
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
27.04.2020, 15:47
Цитата Сообщение от cyberdee Посмотреть сообщение
но где то в нюансах не работает
А можно конкретнее? Если Вы используете второй вариант сценария, то всё должно отрабатывать корректно, как минимум, потому что сканирование файла log.txt идёт молниеносно быстро (периодичность не задана). Я надеюсь Вы не забываете, что переданный параметр в hook.cmd нужно избавлять от кавычек %~1?

Добавлено через 2 минуты
Либо действительно, как советовал Kubuntovod создавать триггер по аудиту события
0
0 / 0 / 0
Регистрация: 16.01.2016
Сообщений: 33
27.04.2020, 16:00  [ТС]
Вот, подробнее, в код добавил timeout.
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off
echo START>1.txt
:step_1
timeout -t 1 >nul 
for /f "tokens=2 delims=;" %%a in ('findstr /b /c:"%date% %time:~,2%" "log.txt"') do (
    set "string=%%a"
)
findstr /l /c:"%string%" "1.txt"
if %errorlevel%==0 (
    goto step_1
) else (
    echo %string%>1.txt
    echo hook!
rem start hook.cmd "%string%"
    goto step_1
)
Вывод: https://prnt.sc/s6reg8
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
27.04.2020, 16:08
Текст в log.txt после ; состоит только и цифр? Вы вроде сказали, что это номер телефона
0
0 / 0 / 0
Регистрация: 16.01.2016
Сообщений: 33
27.04.2020, 16:19  [ТС]
Так и есть, вот скрин.https://prnt.sc/s6rs4y
Сам текст как в первом посте
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
27.04.2020, 16:34
Мистика какая-то, только вчера проверял и всё работало, а сегодня уже не отрабатывает команда:
Windows Batch file
1
findstr /b /c:"%date% %time:~,2%" "log.txt"
Ок, буду разбираться

Добавлено через 4 минуты
Так, у меня заработало. Сценарий и файл log.txt в какой кодировке?
0
0 / 0 / 0
Регистрация: 16.01.2016
Сообщений: 33
27.04.2020, 17:02  [ТС]
UTF-8 все. В кодировке дело?
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
27.04.2020, 17:14
Цитата Сообщение от cyberdee Посмотреть сообщение
UTF-8 все. В кодировке дело?
Да нет, в обоих кодировках работает

Добавлено через 6 минут
А проблема сейчас актуальна? Попробуйте перезапустить весь процесс, но учитывайте, что если в log.txt нет хотя бы одной строки вида 27.04.2020 17, то ошибка повторится (17 я думаю понятно почему)
1
0 / 0 / 0
Регистрация: 16.01.2016
Сообщений: 33
27.04.2020, 17:32  [ТС]
В логе 1 строка. Запущен скрипт.
Ошибки findstr нет, но хукает по таймауту)
https://prnt.sc/s6tbb9

Если честно не совсем понял роль 1.txt в скрипте и почему вы обратили внимание на необходимость именно 17 часов в строке.
0
0 / 0 / 0
Регистрация: 16.01.2016
Сообщений: 33
27.04.2020, 17:42  [ТС]
Так, поправил строку в логе, строго как вы сказали 27.04.2020 17****

Если честно не понял почему нужно строго чтобы дата совпадала с сегодняшней с точностью до часа (17 часов)
Также не понял какую роль выполняет 1.txt..

Поведение поменялось, теперь в лог по таймауту сыпется сама эта строка (полностью) https://prnt.sc/s6tlpe
Я приложил свои файлики к посту, может вы свой вариант приложите?
Вложения
Тип файла: rar testmon.rar (379 байт, 3 просмотров)
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
27.04.2020, 17:47
А, ну из скриншота всё ясно) У Вас дата стоит 25.04.2020, поэтому и циклично идёт hook!
Давайте я объясню логику работы сценария, чтобы Вы понимали. С периодичностью в 1 секунду команда findstr шерстит файл на поиск строки вида: текущая дата текущий час. Последнюю совпадающую строку по данному шаблону он кладёт в переменную (точнее часть строки после ";") и сверяет эту часть строку с наличием аналогичной в файле 1.txt Если её нет, то получается, что последняя строка из log.txt, которую мы занесли в переменную новая и это сигнализирует о том, что её мы можем отправить в качестве параметра hook.cmd и заменить старую строку в 1.txt на эту. Ну а дальше всё по той же схеме. Алгоритм я придумал исходя из содержимого файла log.txt, как я понял новая строка в нём появляется не ранее, чем через минуту. Если у Вас есть предложение как Вы это видите, то напишите, обсудим, при возможности реализуем
0
 Аватар для volodin661
6793 / 2290 / 348
Регистрация: 10.12.2013
Сообщений: 7,901
28.04.2020, 08:25
WATCHER.BAT ( предпочтительная кодировка UTF-8 без BOM)
Пояснение.

Невооруженным глазом видно, что сценарий состоит из двух частей.

1) BAT-часть ( где две собаки @@ [строки 1 - 7] ) неизменна.

Назначение bat-части:
а) выудить путь к последней версии компилятора C# из недр .NET Framework
б) выделить оставшуюся часть данного исходного текста( без символов @@ в начале )
и откомпилировать её как исходный текст C#,
получая на выходе исполняемый файл __watcher.exe

Назвав этот сценарий watcher.bat, вы получите __watcher.exe,
Назвав этот сценарий myapp.bat, вы получите __myapp.exe итд.
Как вы яхту назовёте, так она и поплывёт.

в) Кроме того, при повторном обращении к watcher.bat и при наличии рядом __watcher.exe
повторной компиляции не происходит, просто сразу запускается __watcher.exe.
Исполняемый exe-файл __watcher.exe вполне самодостаточен.
Его можно скопировать в любое другое место и запускать оттуда самостоятельно с такими же параметрами.

2) C# - часть может изменяться пользователем с инженерным образованием под свои нужды.

3) Данный батник можно запустить на любой машине с установленным .Net Framework ( XP, VISTA, ... далее со всеми остановками ). Доустановка Powershell не требуется, но полезна.
Крайне желательно, чтобы версия .Net Framework была не ниже 4.7


4) Никаких доустановок ПО не требуется, просто запустить.

Небольшое описание функционала

Как уже можно догадаться, реализован мониторинг директории,
в которой лежит log-файл и, соответственно, реализован мониторинг самого лог-файла на изменение его
размера и изменения атрибута времени изменения. Для этого использован сервис об`ектов ядра WaitForSingleObjectEx
через высокоуровневый dotnet-интерфейс FileSystemWatcher ( тот же, что и для Powershell ).

После запуска программы она ожидает изменения в заданном лог-файле и если таковые вдруг случатся
( о, ужас ), сработает вызов callback-функции, которая прочитает данные последние изменения и запустит
на исполнение внешний сценарий hook.bat, предварительно записав изменения в файлик и передав hook.bat
имя этого файлика. Это, конечно же, весьма спорное развитие событий, но так у нас захотел ТС.
В конце концов, имея в руках исходник, можно менять стратегию как угодно.
Закончить работу следящей программы можно, нажав на красную кнопку 'q'.

Надёжность данного решения пока не оценивал,
но рабочие тесты выглядели на удивление прилично.

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
@@  IF EXIST "__%~N0.exe" ( "__%~N0.exe" %* ) & (EXIT /B ERRORLEVEL) 
@@  FOR /F %%X IN ('DIR /B /S %WINDIR%\Microsoft.NET\Framework\CSC.EXE') DO @@(SET COMPILER=%%X)
@@  IF NOT DEFINED COMPILER (ECHO No .NET specific compiler presents in your computer !!!) & ( ECHO Goodbye !!! ) & ( EXIT/B -1 )
@@  FINDSTR /B /VC:@@  "%~F0" > "%~N0.cs"
@@  %COMPILER%  /OUT:"__%~N0.exe" /TARGET:exe "%~N0.cs"
@@  IF EXIST "__%~N0.exe" (ECHO Executable file __%~N0.exe created !!! ) & (ECHO Run %~N0 again !!!)  
@@  EXIT/B ERRORLEVEL
 
// ENCODING UTF-8   // Предпочтительная кодировка UTF-8 без BOM
 
using System;
using System.IO;
using System.Reflection;
using System.Diagnostics;
using System.Security.Permissions;
 
public class Watcher
{
    // Служебные переменные
    readonly static FieldInfo charPosField    = typeof(StreamReader).GetField("charPos", BindingFlags.NonPublic    | BindingFlags.Instance | BindingFlags.DeclaredOnly);
    readonly static FieldInfo charLenField    = typeof(StreamReader).GetField("charLen", BindingFlags.NonPublic    | BindingFlags.Instance | BindingFlags.DeclaredOnly);
    readonly static FieldInfo charBufferField = typeof(StreamReader).GetField("charBuffer", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly);
 
    // Служебная подпрограмма для получения текущей позиции чтения с помощью об`екта StreamReader  
    static long ActualPosition(StreamReader reader)
    {
        var charBuffer = (char[])charBufferField.GetValue(reader);
        var charLen    = (int)charLenField.GetValue(reader);
        var charPos    = (int)charPosField.GetValue(reader);
 
        return reader.BaseStream.Position - reader.CurrentEncoding.GetByteCount(charBuffer, charPos, charLen-charPos);
    }
 
    // position  - служебная переменная, хранит смещение в байтах от начала подопытного файла ( в котором мы мониторим изменеия ) до его последней строки
    // watchdir  - имя по умолчанию подопытной директории ( в которой мы мониторим изменения ). Это имя должно задаваться из ком. строки
    // watchfile - имя подопытного файла, в котором мы мониторим изменения. Задаётся пользователем.
    private static long   position;
    public  static string watchdir  =  Path.GetFullPath("procdir");
    public  static string watchfile =  "logfile.log";                   // CHANGE IT !!!
 
 
    public static void Main()
    {
        Run();
    }
 
    [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
    private static void Run()
    {
        string[] args = Environment.GetCommandLineArgs();
 
        // Если в ком строке значение подопытной директории не задано, сливаем воду, уходим. 
        if (args.Length != 2)
        {
            // Display the proper way to call the program.
            Console.WriteLine("Запускать так: {0} <имя каталога для мониторинга>", args[0] );
            return;
        }
        
        watchdir = Path.GetFullPath(args[1]);
 
        if ( !Directory.Exists(watchdir)) {
            Console.WriteLine("Директории не существует");
            return;
        }
 
        // Создание об`екта FileSystemWatcher для мониторинга событий 
        using (var watcher = new FileSystemWatcher())
        {
            watcher.Path = watchdir;
 
            // Декларируем, что будем отслеживать изменения атрибута <LastWrite> и <Size> файла
            watcher.NotifyFilter =  NotifyFilters.LastWrite | NotifyFilters.Size;
 
            // Кого будем отслеживать ( здесь имя нашего лог-файла, но можно задать даже так: *.* )
            watcher.Filter = watchfile;
 
            // ВНИМАНИЕ! Именно здесь добавляем адрес callback-обработчика ( сам обработчик см. ниже  )
 
            watcher.Changed += new FileSystemEventHandler(OnChanged);   
            
 
            // Ныряем в конец содержимого подопытного файла.
            // На кодировку при создании конструктора StreamReader нам здесь наплевать; основная задача - запомнить position у конца
            using (var sr = new StreamReader(Path.Combine(watchdir, watchfile)))
            {
 
                sr.BaseStream.Seek((-1), SeekOrigin.End);
 
                position = ActualPosition( sr );
            }
 
 
            // Начинаем отслеживать !!
            watcher.EnableRaisingEvents = true;
 
            // Встаём на паузу, ждём КУ от пользователя для выхода из программы.
            Console.WriteLine("Введите q <ENTER> для выхода.");
            while (Console.Read() != 'q') ;
        }
    }
 
    // Наш callback обработчик события - изменений в лог-файле  
    public static void OnChanged(object source, FileSystemEventArgs ev)  
    { 
        
        // Строка(и) хранения самых последних изменнеий
        string lastlines;  
 
        // Specify what is done when a file is changed.
        // Console.WriteLine("{0}, with path {1} has been {2}; Last file position in bytes: {3}", ev.Name, ev.FullPath, ev.ChangeType, position);
 
        
        // Собственно чтение последних изменений подопытного файла с помощью об`екта StreamReader. Обратите внимание на кодировку !!!!
        // Если log-file в однобайтной кодировке ANSI ( cp1251 ), то оставляем этот параметр: System.Text.Encoding.Default.
        // Если же log-file в UTF-8 или UTF-16, то этот параметр следует из конструктора совсем убрать(!!!), StreamReader дальше сам разберётся.
        //using (var sr = new StreamReader( Path.Combine(watchdir,watchfile),  System.Text.Encoding.Default))
        using (var sr = new StreamReader( Path.Combine(watchdir,watchfile)))
        {
            sr.BaseStream.Seek(position, SeekOrigin.Begin);
            lastlines = sr.ReadToEnd ();
            position = ActualPosition(sr);
            
            // Отладочный вывод
            //Console.WriteLine( lastlines );
        }
 
        try
        {
            using ( var sw = new StreamWriter("__line__"))
            {
                sw.Write(lastlines);
            }
    
            using (var cmd = new Process())
            {
                cmd.StartInfo.FileName = "cmd.exe";
                cmd.StartInfo.Arguments = "/c hook.bat __line__";
                cmd.StartInfo.UseShellExecute = false;
                //cmd.StartInfo.RedirectStandardOutput = true;
                cmd.Start();
 
                //Console.WriteLine(cmd.StandardOutput.ReadToEnd());
 
                //cmd.WaitForExit();
            }
        }
        catch ( Exception e )
        {
               Console.WriteLine( e.Message ); 
        }
 
    }  
}
1
0 / 0 / 0
Регистрация: 16.01.2016
Сообщений: 33
28.04.2020, 20:08  [ТС]
volodin661, мощную штуку вы запилили. У меня пока не получилось протестировать, может какой то пункт документации пропустил.

При запускаю так скомпилированного файла говорит:
Code
1
2
3
4
5
6
7
Необработанное исключение: System.IO.IOException: Попытка поместить указатель на файл перед началом файла.
 
   в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   в System.IO.FileStream.SeekCore(Int64 offset, SeekOrigin origin)
   в System.IO.FileStream.Seek(Int64 offset, SeekOrigin origin)
   в Watcher.Run()
   в Watcher.Main()
0
 Аватар для volodin661
6793 / 2290 / 348
Регистрация: 10.12.2013
Сообщений: 7,901
28.04.2020, 21:03
cyberdee, пока проверить не могу, виндуса нет.
А не был ли logfile.log пустым?

Нормального тестирования с моей стороны не было, увы.

На настоящий момент исходные параметры, чтобы оживить графиню, наметим следующие:
должна быть проверяемая поддиректория, она называлась у меня procdir
и в ней должен быть подопытный не пустой файл logfile.log и кодировка его пусть будет utf-8 с BOM.

параметры запуска из cmd:
Windows Batch file
1
watcher procdir
параметры запуска из powershell:
PowerShell
1
./watcher procdir
0
0 / 0 / 0
Регистрация: 16.01.2016
Сообщений: 33
30.04.2020, 20:07  [ТС]
volodin661, спасибо, действительно на пустой файл ругалось.
Добавил тестовых данных. Мониторинг запустился!

При попытке добавить строку через Notepad++ получаем ошибку
Code
1
2
3
4
5
6
7
8
9
10
Необработанное исключение: System.IO.IOException: Процесс не может получить доступ к файлу "C:\Users\Dee\Downloads\Monitor\watcher\logfile.log", так как этот файл используется другим процессом.
   в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   в System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   в System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   в System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean checkHost)
   в System.IO.StreamReader..ctor(String path)
   в Watcher.OnChanged(Object source, FileSystemEventArgs ev)
   в System.IO.FileSystemWatcher.OnChanged(FileSystemEventArgs e)
   в System.IO.FileSystemWatcher.CompletionStatusChanged(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* overlappedPointer)
   в System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)
О чем это может говорить?

Добавлено через 35 минут
Karen87, не удалось у меня заставить работать ваш вариант(.
Он у меня просто перебирает строки и делает по ним хуки (echo hook) в каждом цикле, независимо меняется что либо или нет. https://prnt.sc/s8rq47

Нашел на просторах интернета похожий скрипт, который работает, но возвращает всю строку а не только телефон. Не подскажете как цикл подкрутить чтобы разделитель сработал? пробовал играться с tokens и delims, что то не получается.
Очень у меня туго с синтаксисом batch
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
chcp 65001
@echo off
:loop  
timeout -t 2 >nul  
for %%i in (log.txt) do echo %%~ai|find "a">nul || goto :loop
echo file was changed
 
rem last line
For /F "UseBackQ Delims==" %%A In (log.txt) Do Set "lastline=%%A"
set str=%lastline%:
Echo %lastline%
attrib -a log.txt
goto :loop
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
30.04.2020, 20:26
cyberdee, А Вы уверены, что на скриншоте мой код? Я что-то не вижу в нем задействования переменной string
1
0 / 0 / 0
Регистрация: 16.01.2016
Сообщений: 33
30.04.2020, 20:53  [ТС]
Karen87, вы правы, привел в соответствие с вашим кодом. Возможно я скопировал код из старой версии поста.
Протестировал, теперь телефон корректно выцепляется, но все еще цикл срабатывает не по изменению файла, а по таймауту цикла (задал 2 секунды).
https://prnt.sc/s8s9in

Можем ли мы тут не привязываться к датам-времени е в строках, а просто брать телефон из последней строки, после изменения файла?

Вот тот вариант что я выше скинул кажется так и работает. Только понять что поменять, чтобы бралась строка после разделителя.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.04.2020, 20:53
Помогаю со студенческими работами здесь

Мониторинг изменения цвета блока
Добрый день, есть сайт на котором имеется таблицы с 3 столбцами и 1000 строк, некоторые строки меняют цвет (class) на зеленый и обратно на...

Правильный мониторинг изменения содержимого div
Вообщем ситуация такая. Есть вот такой вот код: &lt;html&gt; &lt;head&gt; &lt;/head&gt; &lt;body&gt; &lt;div id='inp'...

Мониторинг каталога на предмет изменения содержимого
Нужно написать функция (или подпрограмму) которая мониторит каталог. Если какой либо файл в каталоге изменился (поменялся размер,...

Мониторинг файла?
Здравствуйте, возникла некоторая проблема в создание программы которая бы выполняла некоторые операции с информацией файла,но при условие...

Мониторинг файла
Добрый день. Может кто подскажет - есть контроллер под Linux ARM У него одна из лап заведена на шину прерывания. Состоянию этой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru