imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 22.09.2004, 12:34     # 1
-Time-
Junior Member
 
Аватар для -Time-
 
Регистрация: 22.05.2003
Сообщения: 170

-Time- Путь к славе только начался
C++ помощь в програмирование :help:

Вот столкнулся с проблемой :
Пробывал написать маленькую програмку что бы когда в отдельной папке появлялся новый файл она выполняла действие ( музыка к примеру )

Но как выяснилось сишка не такая уж и простая как кажеться ((((


Может у кого кусок кода валяеться ?
Буду очень признателен


Спасибо
-Time- вне форума  
Старый 22.09.2004, 13:21     # 2
Dimm
Добрый фей-мод
 
Аватар для Dimm
 
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155

Dimm СуперБогDimm СуперБог
Dimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБог
-Time-

Не все так сложно:

1) Определяешь и запускаешь отдельный поток.
2) В нем вызываешь Win32 API функцию ReadDirectoryChangesW. (смотри в MSDN). Функция может работать как синхронно так и асинхронно. Определяешь нужный тебе фильтр (NotifyFilter) и вызываешь. Функция возвращается, когда произошли изменения в директории.
По результатам нотификации определяешь, что произошло ( в твоём случае - появление нового файла) и выполняешь своё действие (игрешь музыку).
Все это должно работать в цикле (если тебе надо следить постоянно).


П.С.
в .NET используется класс FileSystemWatcher.
__________________
Фотолюбительщина

Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью.
Dimm вне форума  
Старый 22.09.2004, 13:52     # 3
-Time-
Junior Member
 
Аватар для -Time-
 
Регистрация: 22.05.2003
Сообщения: 170

-Time- Путь к славе только начался
[Ghost]
если не сложно можно хоть маленький пример ...

у меня С++ буилдер ... искал в хелпе eadDirectoryChangesW пусто .... ((
-Time- вне форума  
Старый 22.09.2004, 14:10     # 4
Dimm
Добрый фей-мод
 
Аватар для Dimm
 
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155

Dimm СуперБогDimm СуперБог
Dimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБог
-Time-

Дык имя функции я привел из Win32 API. VC++ работает с Win32 API напрямую. Не знаю как там С++ билдер. Ты вообще работал с Win32 API из билдера?

Вот тебе объяснение:
http://msdn.microsoft.com/library/de...rychangesw.asp

а вот пример:
http://msdn.microsoft.com/library/de...hangeswapi.asp
__________________
Фотолюбительщина

Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью.
Dimm вне форума  
Старый 22.09.2004, 16:07     # 5
-Time-
Junior Member
 
Аватар для -Time-
 
Регистрация: 22.05.2003
Сообщения: 170

-Time- Путь к славе только начался
[Ghost] не не работал, но щас вот пытаюсь ....


Спасибо щас бум читать
-Time- вне форума  
Старый 22.09.2004, 17:40     # 6
-Time-
Junior Member
 
Аватар для -Time-
 
Регистрация: 22.05.2003
Сообщения: 170

-Time- Путь к славе только начался
если не трудно подскажите почему не работает ?

Цитата:
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>

void scandir(char *dirname)
{
DIR *dir;
struct dirent *ent;

printf("First pass on '%s':\n",dirname);
if ((dir = opendir(dirname)) == NULL)
{
perror("Unable to open directory");
exit(1);
}
while ((ent = readdir(dir)) != NULL)
printf("%s\n",ent->d_name);

printf("Second pass on '%s':\n",dirname);

rewinddir(dir);
while ((ent = readdir(dir)) != NULL)
printf("%s\n",ent->d_name);
if (closedir(dir) != 0)
perror("Unable to close directory");
}

void main(int argc,char *argv[])
{
if (argc != 2)
{
printf("usage: opendir dirname\n");
exit(1);
}
scandir(argv[1]);
exit(0);
}
-Time- вне форума  
Старый 24.09.2004, 16:10     # 7
VeryLucky
Guest
 
Сообщения: n/a

FileSystemWatcher
 
Старый 25.09.2004, 18:44     # 8
-Time-
Junior Member
 
Аватар для -Time-
 
Регистрация: 22.05.2003
Сообщения: 170

-Time- Путь к славе только начался
ну народ подскажите почему не пашет (((
очень нужно ...
-Time- вне форума  
Старый 25.09.2004, 20:28     # 9
Dimm
Добрый фей-мод
 
Аватар для Dimm
 
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155

Dimm СуперБогDimm СуперБог
Dimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБог
-Time-

Во-первых задавай вопрос точнее:

что значить не работает? Есть много степеней "не работы":
программа может падать, не делаеть то что надо и т.д.

Во-вторых условия:
какая среда разработки (VС++, C++ Builder)

В-третьих, что она вообще должна делать?
__________________
Фотолюбительщина

Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью.
Dimm вне форума  
Старый 27.09.2004, 00:49     # 10
-Time-
Junior Member
 
Аватар для -Time-
 
Регистрация: 22.05.2003
Сообщения: 170

-Time- Путь к славе только начался
[Ghost]
Цитата:
Во-первых задавай вопрос точнее:
в том то и дело ничего (

при запуске просто выдаёт First pass on



В-третьих, что она вообще должна делать?

програма должна просто проверять определёную папку на появление новых файлов, при появление выполнять звуковой сигнал.

Спасибо
-Time- вне форума  
Старый 27.09.2004, 02:28     # 11
Dimm
Добрый фей-мод
 
Аватар для Dimm
 
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155

Dimm СуперБогDimm СуперБог
Dimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБог
Не на писал Во-вторых. Судя по всему с++ билдер.

Все абсолютно законно - First pass on. После 1-го вызова функции scandir программа выходит из main.

Я не вижу у тебя объявления потока (thread). А ведь я писал об этом в 1-ом посте.
Сканирование папки на изменения файла - процесс постоянный, а не одноразовый. И выполняться это должно в отдельном потоке. А так она у тебя один раз проверяет папку на изменения и выходит.

Смотри на примеры в MSDN по линку который я тебе дал.
__________________
Фотолюбительщина

Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью.
Dimm вне форума  
Старый 29.09.2004, 17:17     # 12
Dimm
Добрый фей-мод
 
Аватар для Dimm
 
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155

Dimm СуперБогDimm СуперБог
Dimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБог
Вот пример:

Код:
public class Watcher
{

    public static void Main()
    {

        string[] args = System.Environment.GetCommandLineArgs();
 
        // If a directory is not specified, exit program.
        if(args.Length != 2)
        {
            // Display the proper way to call the program.
            Console.WriteLine("Usage: Watcher.exe (directory)");
            return;
        }

        // Create a new FileSystemWatcher and set its properties.
        FileSystemWatcher watcher = new FileSystemWatcher();
        watcher.Path = args[1];
        /* Watch for changes in LastAccess and LastWrite times, and 
           the renaming of files or directories. */
        watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite 
           | NotifyFilters.FileName | NotifyFilters.DirectoryName;
        // Only watch text files.
        watcher.Filter = "*.txt";

        // Add event handlers.
        watcher.Changed += new FileSystemEventHandler(OnChanged);
        watcher.Created += new FileSystemEventHandler(OnChanged);
        watcher.Deleted += new FileSystemEventHandler(OnChanged);
        watcher.Renamed += new RenamedEventHandler(OnRenamed);

        // Begin watching.
        watcher.EnableRaisingEvents = true;

        // Wait for the user to quit the program.
        Console.WriteLine("Press \'q\' to quit the sample.");
        while(Console.Read()!='q');
    }

    // Define the event handlers.
    private static void OnChanged(object source, FileSystemEventArgs e)
    {
        // Specify what is done when a file is changed, created, or deleted.
       Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
    }

    private static void OnRenamed(object source, RenamedEventArgs e)
    {
        // Specify what is done when a file is renamed.
        Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
    }
}
__________________
Фотолюбительщина

Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью.
Dimm вне форума  
Старый 30.09.2004, 09:55     # 13
gandalf_g
Junior Member
 
Регистрация: 09.12.2003
Адрес: Москва
Сообщения: 62

gandalf_g Путь к славе только начался
пример за мониторингом папки на сях тут
воспользуйся поиском "ReadDirectoryChanges" в инете есть примеры.
__________________
не учите людей думать, они вам этого не простят...
gandalf_g вне форума  
Старый 22.03.2005, 15:05     # 14
apolo.m.e
Guest
 
Сообщения: n/a

Плиз помогите горю:
нужна консольная програмка на С++ на тему:
1. Создать "Справочник покупателя". В него входят: база
торговых точек города
название,
адрес и телефон

специализация и время работы.
Выбор магазинов по произвольному шаблону (т.е. поиск по
любому из параметров)

2. Создать программу тестирующую пользователя по какой-либо
предметной области.

Программа должна иметь возможность загрузить необходимый
тест из файла, а также выгрузить
в отдельный файл результаты сдачи данного теста текущим
пользователем.

Любую, на выбор. Если есть возможность ----- apolo.m.e@mail.ru
 

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 01:56.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.