Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: Реагировать на запись в файл Добавлено: 19.01.06 16:41  

Автор вопроса:  Max

Ответить

  Ответы Всего ответов: 37  

Номер ответа: 31
Автор ответа:
 Alexandrus



ICQ: 496782368 

Вопросов: 18
Ответов: 312
 Web-сайт: starsorion.com
 Профиль | | #31
Добавлено: 26.01.06 22:38
Sorry!API забыл. :)
Private Declare Function FindFirstChangeNotification Lib "kernel32" _
 Alias "FindFirstChangeNotificationA" _
 ;(ByVal lpPathName As String, ByVal bWatchSubtree As Long, _
 ByVal dwNotifyFilter As Long) As Long
 Private Declare Function WaitForSingleObject Lib "kernel32" _
 ;(ByVal hHandle As Long, ByVal dwMilliseconds As Long) _
 As Long

С ув. Alex

Ответить

Номер ответа: 32
Автор ответа:
 Alexandrus



ICQ: 496782368 

Вопросов: 18
Ответов: 312
 Web-сайт: starsorion.com
 Профиль | | #32
Добавлено: 26.01.06 22:43
Упс!:(((
Второю страницу не прочитал ,где это всё уже обсуждалось...

С ув. Alex

Ответить

Номер ответа: 33
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #33
Добавлено: 27.01.06 08:31
Можно попробовать прикрутить к отдельному потоку

Я бы сказал не можно, а нужно..

Ответить

Номер ответа: 34
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #34 Добавлено: 27.01.06 11:00
Вот потому и нужно создавать отдельный файл. Через CreateThread - лотерея, 50/50 - вылетит/не вылетит, тут либо на Си/Асме писать dll, либо на том же VB, но ActiveX.exe. Все три варианта не особо привлекательны, но, если позволяют знания, второй все же есть меньшее зло.

Ответить

Номер ответа: 35
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #35
Добавлено: 27.01.06 15:05
Что я могу добавить.. Есть в Win32 Programming Refrence статейка Monitoring Changes in a Directory or Directory Tree, процитирую её:

The following example monitors the directory tree starting at C:\ for directory name changes. It also monitors the C:\WINDOWS directory for filename changes.

The example uses the FindFirstChangeNotification function to create two notification handles and the WaitForMultipleObjects function to wait on the handles. Whenever a directory is created or deleted in the tree starting at C:\ , the example updates the entire directory tree. Whenever a file is created or deleted in the C:\WINDOWS directory, the example refreshes the WINDOWS directory. The FindNextChangeNotification function restarts the change notification each time the example processes a change.

DWORD dwWaitStatus;
HANDLE dwChangeHandles[2];
 
// Watch the C:\WINDOWS directory for file creation and
// deletion.
 
dwChangeHandles[0] = FindFirstChangeNotification(
    "C:\\WINDOWS", // directory to watch
    FALSE, // do not watch the subtree
    FILE_NOTIFY_CHANGE_FILE_NAME); // watch filename changes
 
if (dwChangeHandles[0] == INVALID_HANDLE_VALUE)
    ExitProcess(GetLastError());
 
// Watch the C:\ subtree for directory creation and

// deletion.
 
dwChangeHandles[1] = FindFirstChangeNotification(
    "C:\\", // directory to watch
    TRUE, // watch the subtree
    FILE_NOTIFY_CHANGE_DIR_NAME); // watch dir. name changes
 
if (dwChangeHandles[1] == INVALID_HANDLE_VALUE)
    ExitProcess(GetLastError());
 
// Change notification is set. Now wait on both notification
// handles and refresh accordingly.
 
while (TRUE)
{
 
    // Wait for notification.

 
    dwWaitStatus = WaitForMultipleObjects(2, dwChangeHandles,
        FALSE, INFINITE);
 
    switch (dwWaitStatus) {
 
        case WAIT_OBJECT_0:
 
        // A file was created or deleted in C:\WINDOWS.
        // Refresh this directory and restart the
        // change notification. RefreshDirectory is an
        // application-defined function.
 
            RefreshDirectory("C:\\WINDOWS";)
            if ( FindNextChangeNotification(
                    dwChangeHandles[0]) == FALSE )

                ExitProcess(GetLastError());
            break;
 
        case WAIT_OBJECT_0 + 1:
 
        // A directory was created or deleted in C:\.
        // Refresh the directory tree and restart the
        // change notification. RefreshTree is an
        // application-defined function.
 
            RefreshTree("C:\\";);
            if (FindNextChangeNotification(
                    dwChangeHandles[1]) == FALSE)
                ExitProcess(GetLastError());

            break;
 
        default:
            ExitProcess(GetLastError());
    }
}

Ответить

Номер ответа: 36
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #36
Добавлено: 27.01.06 16:49
Таки написал пример создания потока, который проводит мониторинг записи файлов в папку "C:\test\", в т.ч. и повторное сохранение (на ассемблере). После первой записи файла поток пересылает сообщение основному окну и завершает свою работу.

http://mc-black.narod.ru/WriteMon.zip

Вот функция, т.е. сам поток:
ThreadProc proc uses eax Param:DWORD
@@:
invoke FindFirstChangeNotification,addr lpszDir,FALSE,FILE_NOTIFY_CHANGE_LAST_WRITE
invoke WaitForSingleObject,eax,5000
cmp eax,WAIT_TIMEOUT
je @b
invoke SendMessage,hWndMain,WM_FINISH,NULL,NULL
ret
ThreadProc endp

Ответить

Номер ответа: 37
Автор ответа:
 Max



Вопросов: 12
Ответов: 17
 Профиль | | #37 Добавлено: 29.01.06 08:18
спасибо всем.

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам