| imho.ws |
![]() |
|
|
|
# 1 |
|
Junior Member
Регистрация: 22.05.2003
Сообщения: 170
![]() |
C++ помощь в програмирование :help:
Вот столкнулся с проблемой :
Пробывал написать маленькую програмку что бы когда в отдельной папке появлялся новый файл она выполняла действие ( музыка к примеру ) Но как выяснилось сишка не такая уж и простая как кажеться (((( Может у кого кусок кода валяеться ? Буду очень признателен Спасибо |
|
|
|
|
# 2 |
|
Добрый фей-мод
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
-Time-
Не все так сложно: 1) Определяешь и запускаешь отдельный поток. 2) В нем вызываешь Win32 API функцию ReadDirectoryChangesW. (смотри в MSDN). Функция может работать как синхронно так и асинхронно. Определяешь нужный тебе фильтр (NotifyFilter) и вызываешь. Функция возвращается, когда произошли изменения в директории. По результатам нотификации определяешь, что произошло ( в твоём случае - появление нового файла) и выполняешь своё действие (игрешь музыку). Все это должно работать в цикле (если тебе надо следить постоянно). П.С. в .NET используется класс FileSystemWatcher.
__________________
Фотолюбительщина Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью. |
|
|
|
|
# 4 |
|
Добрый фей-мод
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
-Time-
Дык имя функции я привел из Win32 API. VC++ работает с Win32 API напрямую. Не знаю как там С++ билдер. Ты вообще работал с Win32 API из билдера? Вот тебе объяснение: http://msdn.microsoft.com/library/de...rychangesw.asp а вот пример: http://msdn.microsoft.com/library/de...hangeswapi.asp
__________________
Фотолюбительщина Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью. |
|
|
|
|
# 6 | |
|
Junior Member
Регистрация: 22.05.2003
Сообщения: 170
![]() |
если не трудно подскажите почему не работает ?
Цитата:
|
|
|
|
|
|
# 9 |
|
Добрый фей-мод
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
-Time-
Во-первых задавай вопрос точнее: что значить не работает? Есть много степеней "не работы": программа может падать, не делаеть то что надо и т.д. Во-вторых условия: какая среда разработки (VС++, C++ Builder) В-третьих, что она вообще должна делать?
__________________
Фотолюбительщина Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью. |
|
|
|
|
# 10 | |
|
Junior Member
Регистрация: 22.05.2003
Сообщения: 170
![]() |
[Ghost]
Цитата:
при запуске просто выдаёт First pass on В-третьих, что она вообще должна делать? програма должна просто проверять определёную папку на появление новых файлов, при появление выполнять звуковой сигнал. Спасибо |
|
|
|
|
|
# 11 |
|
Добрый фей-мод
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Не на писал Во-вторых. Судя по всему с++ билдер.
Все абсолютно законно - First pass on. После 1-го вызова функции scandir программа выходит из main. Я не вижу у тебя объявления потока (thread). А ведь я писал об этом в 1-ом посте. Сканирование папки на изменения файла - процесс постоянный, а не одноразовый. И выполняться это должно в отдельном потоке. А так она у тебя один раз проверяет папку на изменения и выходит. Смотри на примеры в MSDN по линку который я тебе дал.
__________________
Фотолюбительщина Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью. |
|
|
|
|
# 12 |
|
Добрый фей-мод
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Вот пример:
Код:
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);
}
}
__________________
Фотолюбительщина Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью. |
|
|
|
|
# 14 |
|
Guest
Сообщения: n/a
|
Плиз помогите горю:
нужна консольная програмка на С++ на тему: 1. Создать "Справочник покупателя". В него входят: база торговых точек города название, адрес и телефон специализация и время работы. Выбор магазинов по произвольному шаблону (т.е. поиск по любому из параметров) 2. Создать программу тестирующую пользователя по какой-либо предметной области. Программа должна иметь возможность загрузить необходимый тест из файла, а также выгрузить в отдельный файл результаты сдачи данного теста текущим пользователем. Любую, на выбор. Если есть возможность ----- apolo.m.e@mail.ru |