0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Варианты синхронизации автономных файлов

Варианты синхронизации автономных файлов

Delphi site: daily Delphi-news, documentation, articles, review, interview, computer humor.

Существуют различные варианты синхронизации автономных файлов с сетевыми ресурсами. Вы можете установить синхронизацию при входе и/или выходе из системы, по заданному времени или в период нахождения компьютера в ждущем режиме (рис. 5.19).

Настройка вариантов синхронизации автономных файлов в Windows

Рис. 5.19. Настройка вариантов синхронизации автономных файлов в Windows

Настройки синхронизации устанавливаются в программе Синхронизовать, которая расположена в меню Пуск | Стандартные. Заметьте, что синхронизация может быть проведена только в то время, когда пользователь совершил вход в компьютерную сеть.

Самоучитель системного администратора
Новости за месяц
  • Ноябрь
    2021
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
Архив новостей
1999123456789101112
2000123456789101112
2001123456789101112
2002123456789101112
2003123456789101112
2004123456789101112
2005123456789101112
2006123456789101112
2007123456789101112
2008123456789101112
2009123456789101112
2010123456789101112
2011123456789101112
2012123456789101112
2013123456789101112
2014123456789101112
2015123456789101112
2016123456789101112
2017123456789101112
2018123456789101112
2019123456789101112
2020123456789101112
2021123456789101112
Последние публикации
  • Популярность в сети
  • А может пообщаться?
  • Миф или реальность
  • Интернет, какой выбрать?
  • Общаемся, советуемся, ищем любовь!

Delphi-синхронизация папок по сети

У меня есть приложение, которое подключается к базе данных и может использоваться в многопользовательском режиме, когда несколько компьютеров могут подключаться к одному и тому же серверу базы данных для просмотра и изменения данных. Один из клиентов всегда обозначается как ‘Master’ клиент. Этот мастер также получает текстовую информацию от входа RS232 или UDP и каждую секунду записывает эти данные в текстовый файл на локальном компьютере.

Моя проблема заключается в том, что другие клиенты должны получить доступ к этим данным от главного клиента. Я просто задаюсь вопросом, как лучше и эффективнее всего приступить к решению этой проблемы. Я рассматриваю два варианта:

  1. Напишите класс синхронизации папок для синхронизации папки на удаленном (главном) компьютере с папкой на локальном (клиентском) компьютере. Это будет потоковое, буферизованное копирование файлов.
  2. Реализуйте клиент / сервер таким образом, чтобы главный компьютер мог обслуживать эти данные любому клиенту, который подключается и запрашивает эти данные. Мастер отправит файл по TCP/UDP запрашивающему клиенту.

Решение должно будет учитывать следующее:

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

B. процедура копирования должна копировать только те файлы, которые были изменены позже, чем те, которые уже находятся на клиентской машине.

c. Быть как можно более эффективным

d. все машины находятся на LAN

е. Синхронизация должна выполняться, скажем, каждые 10 минут или около того.

f. объем данных находится только в порядке

50MB,, но как только начальная (первая) синхронизация будет завершена, то объем передаваемых данных будет только в порядке

1MB., что в будущем увеличится

Какой метод лучше использовать? Что такое pros/cons? я также видел сообщение о быстрой копии файла , которое я рассматриваю для использования.

4 ответа

  • Убийство запущенных процессов на какой-то другой машине (по сети) с помощью Delphi?

Как я могу убить запущенный процесс на какой-то другой машине (по сети) с помощью Delphi?

Как лучше всего извлечь папки Outlook из Delphi? В идеале я хотел бы получить папку Входящие и любые другие папки внутри нее. Мне не нужны заголовки/сообщения email, просто имена папок. Delphi BDS 2006

Если вы используете базу данных, почему «master» записывает данные в текстовый файл, а не в базу данных, если эти данные необходимо совместно использовать?

Зачем изобретать колесо? Вместо этого используйте rsync . Пакет для windows: cwrsync .

Читайте так же:
Не работает регулировка подсветки на ноутбуке

Например, на главной машине установите сервер rsync, а на клиентских машинах установите клиенты rsync или просто поместите файлы в каталог проекта. При необходимости ваше приложение на клиентской машине должно выполнить rsync.exe с запросом на синхронизацию необходимых файлов с сервера.

Для копирования открытых файлов вам необходимо настроить службу теневого копирования томов Windows. Вот очень подробное описание того, как можно настроить главную машину, чтобы разрешить копирование открытых файлов с помощью Windows Volume Shadow Copy.

Напишите интерфейс веб — службы, чтобы клиенты могли подключаться к серверу и извлекать новые данные по мере необходимости. Или вы можете написать его как механизм подписки/push, чтобы клиенты подключались к серверу «subscribe», а затем сервер отправлял все новое содержимое зарегистрированным клиентам. Клиенты должны будут полностью синхронизироваться (получить все изменения с момента последней синхронизации) при регистрации, если они были в автономном режиме, когда происходили обновления.

Оба решения будут отлично работать на LAN, выбор за вами. Возможно, вы также захотите рассмотреть эти вопросы, связанные с выбранной вами технологией:

  • Deployment гибкость. Для работы с общими файлами и копирования файлов требуется общий доступ к файлам, и все пользователи LAN могут получить доступ к файлам журнала.
  • Долгосрочные планы: Общие файлы хороши только в локальной сети, в то время как решения на основе IP работают в маршрутизируемых сетях, включая Интернет.
  • Файловое решение было бы значительно проще реализовать по сравнению с решением IP.
Похожие вопросы:

Мне нужно синхронизировать папки files & на двух недоменных машинах на базе Windows в общедоступной сети. Я думал rsync над SSH-но мне было интересно, есть ли более простое решение? Есть ли.

Я начал прототип с Delphi со всеми исходными файлами в одном каталоге . Теперь я хочу реорганизовать все с помощью папок . Я нашел два способа сделать это. 1/ сначала нужно открыть каждый блок в.

Как я могу обнаружить все доступные сети WiFi с помощью Delphi? (источник: filebuzz.com )

Как я могу убить запущенный процесс на какой-то другой машине (по сети) с помощью Delphi?

Как лучше всего извлечь папки Outlook из Delphi? В идеале я хотел бы получить папку Входящие и любые другие папки внутри нее. Мне не нужны заголовки/сообщения email, просто имена папок. Delphi BDS.

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

Вчера у нас были некоторые проблемы, и в итоге нам пришлось копировать множество файлов и папок почти вручную по сети с сервера 1 на сервер 2. Теперь я хочу убедиться, что все файлы, которые.

Я настроил окно Vagrant, которое запускает мой webserver, чтобы разместить мое приложение Symfony2. Все работает нормально, кроме синхронизации папок. Я попробовал 2 вещи: config.vm.synced_folder.

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

Рассмотрим пример потока загрузки, который можно регулировать (например, торрент-клиент, синхронизация dropbox и т. д.). Как программа применяет противодавление к сети? Я думаю, что с точки зрения.

Delphi: заметки программиста. Часть 1

Известно, что Delphi создает множество файлов с расширениями pas, dfm, dpr и т.д. Обычно программиста интересуют файлы кода (pas) и описания форм (dfm), а остальные остаются вне его поля зрения, а зря — они несут важную информацию, которую можно (а в ряде случаев — нужно) изменять.

Начнем с файла проекта (dpr). Фактически он содержит собственно программу, в то время как связанные с проектом многочисленные файлы форм и DLL представляют собой подпрограммы.

Структура файла проекта, содержащего единственную форму, такова, как показано в листинге 1.

Читайте так же:
1с синхронизация с сайтом по артикулу

Проект (программа) начинается обращением к методу Initialize глобального объекта Application и заканчивается после завершения его метода Run. Этот метод — центральный: он визуализирует главную форму приложения и осуществляет диспетчеризацию сообщений Windows. От того, какая работа выполняется строками кода, расположенными перед обращением к нему, зависят время загрузки приложения, и вид экрана до появления главного окна.

Метод Initialize предусмотрен, как говорится, на всякий случай и по умолчанию ничего не осуществляет. Чтобы заставить его работать, следует поместить указатель на соответствующую процедуру без параметров в глобальную переменную InitProc. Это можно сделать в секции инициализации любого модуля (код этих секций активизируется до начала работы основной программы) или непосредственно в теле главного проекта (листинг 2):

Разумеется, в этом последнем случае будет проще в первом операторе основной программы явно обратиться к процедуре Init. Вообще говоря, в подавляющем большинстве случаев оператор Application.Initialize можно удалить без каких-либо последствий для программы.

Сокращение времени загрузки

В реальном проекте со множеством форм между обращениями к Initialize и Run обычно расположены многочисленные вызовы метода CreateForm, с помощью которого создаются используемые в проекте формы. Каждый вызов этого метода увеличивает время загрузки приложения. В начальный момент на экране будет видно только одно окно главной формы приложения (оно создается первым обращением к CreateForm), а остальные объекты-окна можно создавать в ходе работы программы перед визуализацией соответствующего окна.

По умолчанию в переключателе Auto create forms (вызывается с помощью опции Project|Options среды Delphi) на закладке Preference окна Tools|Environment установлен флажок, что заставляет Delphi помещать любую новую форму в список Auto-create forms и формировать соответствующий оператор обращения к CreateForm в файле проекта. Если очистить этот переключатель перед началом работы над проектом или перенести ненужные формы в список Available forms окна Project|Options, можно существенно (иногда — в десятки раз) сократить время загрузки приложения.

Вид экрана до появления главного окна

В приводимом ниже листинге 3 (пример заимствован из справочной системы Delphi) в программе создается 5 окон. В форме Form5 имеется индикатор ProgressBar1, с помощью которого визуализируется процесс загрузки программы, точнее — создания остальных окон.

Защита программы паролем

Как видно из примера, программист может поместить любой код до обращения к методу Application.Run. В частности, он может показать диалоговое окно с запросом пароля и блокировать вызов Application.Run, если введенный пользователем пароль неверен. В следующем примере (листинг 4 — Password.dpr) в проекте используются две формы: стандартная форма InputQuery и главная форма MainForm. Форма InputQuery создается при обращении к одноименной функции, определенной в модуле Dialogs. Она представляет собой небольшое диалоговое окно с однострочным редактором TEdit и двумя кнопками — ОК и Cancel. В окне пользователь должен ввести пароль (Delphi) и нажать Enter.

Пробные версии программ

Вышеописанным способом можно создавать пробные версии программ, которые будут функционировать только до определенной даты или до исчерпания заданного количества запусков. В листинге 5 представлен файл проекта (Trial.dpr), в котором пробная версия программы может запускаться не более 5 раз. Для запоминания номера очередного прогона используется системный реестр.

Здесь следует дать небольшой комментарий. Модуль Registry декларирует класс TRegistry, который представляет программисту доступ к системному реестру Windows. С помощью двух обращений к функции TRegistry.OpenKey создается и/или открывается ключ HKEY_CURRENT_USERSoftwareTrialProg системного реестра. Функция TRegistry.ValueExists возвращает True, если этот ключ содержит параметр с именем MaxRun и для него определено значение. При первом запуске приложения это не так, поэтому процедурой WriteInteger создается параметр и для него указывается начальное значение 5 (максимальное количество прогонов программы). При каждом следующем запуске этот параметр уменьшается на 1 и в момент, когда он становится равен 0, приложение блокирует создание и отображение главного окна.

Вставка поясняющих комментариев к именам форм

Обратите внимание на предложение uses в тексте проекта. При перечислении нестандартного модуля Uni1 с помощью зарезервированного слова in указывается имя файла с текстом модуля (‘Unit1.pas’), а следующий за именем комментарий именует объект-окно, создаваемый модулем Unit1. Такого рода объявления Delphi автоматически создает для каждого включенного в проект модуля. Delphi считает входящими в проект только перечисленные в этом предложении модули, и их алфавитный список появляется при выборе опции View | Units; а при выборе View | Forms показывается список всех перечисленных в комментариях объектов.

Читайте так же:
Синхронизация баз данных 1с бухгалтерия

Последнее обстоятельство можно использовать для вставки краткого комментария, указывающего назначение формы: при разработке сложного проекта в него обычно включается много десятков, а иногда и сотен форм, и подобная возможность может оказаться совсем не лишней. В качестве примера на рис. 1 показана копия экрана, отображающего файл проекта с комментариями, и соответствующее окно View Form.

О переносе проекта в другую папку

Кстати, данный рисунок иллюстрирует нарушение правила «один проект — одна папка»: в этом проекте, вопреки означенному правилу, многие модули хранятся во вложенных папках, в результате Delphi указывает длинные маршруты доступа к соответствующим файлам. Если такой проект скопировать на дискету, то эти маршруты останутся без изменения и компилятор не сможет найти нужные файлы. Еще хуже, если скопировать проект в другую папку на том же жестком диске. В этом случае начнутся неприятности: вы будете что-то изменять в новом проекте, но приложение на это никак не отреагирует, а если вы установите контрольную точку останова в каком-либо из модулей, то она окажется неработоспособной — компилятор будет по-прежнему использовать оригинальные файлы, а не копии.

Если вы захотите перенести проект в другую папку и при этом сохранить его работоспособность, вам нужно сначала с помощью опции File|Save Project As скопировать в эту папку файл проекта, а затем с помощью опции File|Save As перенести туда все связанные с проектом модули: только тогда Delphi сумеет внести необходимые коррекции в файл проекта. Но если все файлы хранятся в единственной папке, то в предложении uses не указываются маршруты доступа, и поэтому вы сможете безболезненно скопировать разом все файлы в другую папку.

Настроечный файл .dsk, в котором среда сохраняет информацию о состоянии экрана в момент выхода из Delphi, также содержит полные маршруты доступа к открытым файлам. При переносе проекта этот файл копировать не следует.

Разнообразим вывод сообщений

Все богатство изобразительных возможностей Windows вовсе не исчерпывается набором свойств и методов класса TCanvas: этот класс инкапсулирует лишь наиболее популярные приемы работы с чертежными инструментами. В табл. 1 перечислены некоторые функции Windows, которые не инкапсулирует класс TCanvas и способны значительно разнообразить текстовый вывод (именно он наиболее обеднен узкими рамками TCanvas).

Отдельные поля структуры TLogFont для функции CreateFontIndirect имеют следующий смысл:

lfHeight — высота шрифта в пунктах (1 пункт = 1 /72 дюйма); если больше 0 — определяет высоту «знако­мес­та» (с учетом выступающих над заглавным символом элементов в буквах Ё, Й); если меньше 0 — определяет высоту «чистого» символа, если равно 0 — высоту выбирает Windows;

lfWidth — средняя ширина символа; если равно 0 — ширину устанавливает Windows;

lfEscapment — угол наклона базовой линии текста в десятых долях градуса относительно горизонтального направления; положительные значения — поворот по часовой стрелки; в Windows 95/98 совпадает с lfOrientation;

lfOrientation — угол наклона символов по отношению к базовой линии; в Windows NT для шрифтов True Type может отличаться от lfEscapment; для этого следует установить режим устройства отображения равным gm_Advanced (по умолчанию устанавливается gm_Compatible);

lfWeight — плотность шрифта (fm_DontCare=0 — плотность выбирает Windows; fm_Thin=100 — очень тонкий шрифт; fm_ExtraLight=200 — очень светлый; fm_Light=300 — светлый; fm_Normal=400 — нормальный; fm_Medium=500 — утолщенный; fm_SemiBold=600 — полужирный; fm_Bold=700 — жирный; fm_ExtraBold=800 — усиленный; fm_Heavy=900 — тяжелый);

Читайте так же:
Синхронизация двух файлов excel

lfItalic, lfUnderline, lfStrikeOut — ненулевое значение означает соответственно наклонный, перечеркнутый и подчеркнутый шрифт;

lfCharSet — набор символов (ANSI_CharSet=0; Default_CharSet=1; Symbol_Char­Set=2; ShiftJis_CharSet=128; OEM_CharSet=255);

lfOutPrecision — точность представления шрифта; рекомендуется Out_TT_Prec (выбирает True Type и векторные шрифты, если есть несколько разновидностей одноименных шрифтов) или Out_TT_Only_Prec (только True Type);

lfClipPrecision — определяет точность отсечения надписи границами области прорисовки (Clip_Character_Precis, Clip_Embedded, Clip_Mask, Clip_TT_Always, Clip_Default_Precis — рекомендуется, Clip_LH_Angles, Clip_Stroke_Precis);

lfQuality — определяет качество прорисовки (Default_Quality, Draft_Quality, Proof_Quality);

lfPitchAndFamily — в четырех младших разрядах указывается тип шрифта, в четырех старших — его семейство;

lfFaceName — имя гарнитуры шрифта.

На рис. 2 показан пример вывода наклонными шрифтами, созданными функцией CreateFontIndirect (CreateFont.dpr).

Как реализован этот пример, показано в листинге 6.

Параметр Format функции DrawText может содержать один или несколько флагов (табл. 2).

Если установлен флаг dt_CalcRect, функция изменяет высоту и ширину прямоугольника таким образом, чтобы вывести весь текст. Если выводится несколько строк, ширина вывода не меняется. Функция возвращает истинную высоту прямоугольника вывода.

Параметр Options функции ExtTextOut может быть комбинацией следующих значений:

eto_Clipped — текст будет отсекаться границами Rect;

eto_Gliph_Index — блокирует обработку языковым драйвером;

eto_Opaque — фон перерисовывается заново;

eto_RTLReading — вывод для чтения справа налево.

При выводе текста стандартными методами TCanvas всегда заново прорисовывается фон символов (цвет фона возвращает функция GetBkColor). Если цвет фона символов отличается от фона канвы, вывод сопровождается неприятными побочными эффектами. Если в примере из листинга 6 для формы оставить стандартный цвет clFaceBtn, окно вывода будет таким, как на рис. 3.

Конечно, с помощью функции SetBkColor можно установить, чтобы цвет формы совпадал с цветом канвы, однако это не всегда возможно. Для примера на рис. 4 показан экран, который традиционно создают многие программы установки Setup.exe. Фон на таком экране не остается постоянным, а плавно переходит от интенсивного синего к черному. Ясно, что установить переменный цвет функцией SetBkColor невозможно. Более того, заглавные надписи программ Setup.exe также традиционно выводятся утолщенным наклонным шрифтом Times New Roman белыми буквами с черной тенью. Реализовать подобный эффект достаточно просто. Так, нужно вообще отказаться от прорисовки фона, установив с помощью функции SetBkMode режим Transparent, и вывести надпись дважды: первый раз черным цветом, а второй — белым, сместив вторую надпись немного влево и вверх относительно первой. Листинг 7 иллюстрирует сказанное (Setup.dpr):

На рис. 4 показано окно работающей программы.

Включение в библиотеку форм

Несмотря на то что DLL не имеет собственной формы, с ее помощью можно вызывать формы из связанных с библиотекой модулей. Для этого в библиотеке используется ссылка uses на связанные модули-формы и объявляются экспортируемые из DLL подпрограммы, в которых реализуется вызов соответствующих форм.

В следующих примерах (TestDLLForm.dpr) иллюстрируется техника включения в DLL формы и использования ее в вызывающей программе (листинги 8, 9 и 10).

Модуль формы DLLForm, помещенной в DLL, ссылается на стандартный модуль Forms и, таким образом, получает свой глобальный объект Application, который ничего «не знает» о глобальном объекте вызывающей программы. В режиме модального вызова это не имеет особого значения, поскольку модальное окно блокирует работу вызывающей программы. В режиме немодального вызова следует синхронизовать действия объектов, в противном случае минимизация главного окна, например, не приведет к минимизации окна DLL. Синхронизация достигается тем, что дескриптор объекта Application DLL заменяется соответствующим дескриптором вызывающей программы.

При показе формы в немодальном режиме она может быть закрыта либо вызвавшей ее программой, либо щелчком по собственной системной кнопке Закрыть. В последнем случае она должна каким-то образом известить вызывающую программу об этом событии. Для этого используется стандартный механизм посылки Windows-сообщения. Сообщение должно иметь адрес — дескриптор окна, для которого оно предназначено. Вот почему вторым параметром обращения к функции ShowForm в DLL передается и в поле CallForm запоминается дескриптор окна вызывающей программы. Обработчик события OnClose формы проверяет это поле и, если оно определено, посылает вызвавшему окну сообщение с индексом WM_USER. В вызывающей программе предусмотрен обработчик этого сообщения, в котором реализуются необходимые действия.

Читайте так же:
Почему не идет синхронизация яндекс диска

Студия программирования

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

Определение лиц – наиболее развитая область распознавания образов. Любая современная «мыльница» или веб-камера имеет в своем распоряжении какой-либо алгоритм для этой цели. Наша статья посвящена теме определения лиц, поэтому и все алгоритмы будут рассмотрены применительно к ней.

В этой статье мы завершим рассказ о создании собственного блога с использованием движка WordPress, начатый в предыдущем номере

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

Как Oracle поступит с технологиями, приобретенными вместе с Sun?

Для решения столь необычной задачи потребуются четыре инструмента: движок блогов WordPress, работающий на базе MySQL, карты Google (точнее, API 3.0 для них), PHP, а также фреймворк jQuery и любой современный браузер.

В «семерку» включен достаточно удобный PowerShell, помогающий автоматизировать большинство действий, например синхронизировать содержимое двух папок. Данная процедура довольно проста: требуется прочитать список исходных и результирующих файлов и каталогов, сравнить их и скопировать изменившиеся объекты.

Trial-версия продукта доступна по ссылке downloads.embarcadero.com/free/rad_studio, и каждый может в течение 30 дней составить о нем собственное мнение. Пакет установки позволяет сразу инсталлировать Delphi XE, С++Builder и документацию к этим двум IDE.

Итак, открываем Visual Studio Express и создаем новый проект — консольное приложение с именем ConsoleApplication3. Между строками Sub Main () и End Sub вставляем учебный код игры «Города» — файл с листингом программы вы найдете на «Мир ПК-диске».

Поэтому давайте сейчас запрограммируем древнюю китайскую игру «Камень, ножницы, бумага». В ней есть победная развязка и интрига. Пользователь и компьютер загадывают один из трех знаков: камень, ножницы или бумагу.

Ввместе с «новыми» возможностями, которые дает .NET Framework 3.5, работа с LINQ превращается в сплошное удовольствие. В настоящее время Microsoft представила несколько провайдеров LINQ: LINQToOBJECTS, LINQToSQL, LINQToDATASET, LINQToENTITIES и LINQToXML. Последний из перечисленных мы и обсудим в данной статье.

В процессе так называемого визуального программирования большая часть кода создается компьютерной программой. Пользователю остается лишь водить мышью по экрану и вписывать значения в отведенные окна. В таком режиме очень сложно научиться программировать «от и до». На ум приходит сравнение из области кулинарии.

Вышли на финишную прямую — нам осталось совсем немного, нужно реализовать следующее

В апреле 2010 г. вместе с финальным выпуском .NET Framework 4.0 вышла новая среда разработки— Visual Studio 2010. Первоначальная дата выпуска была отложена из-за недостатков, выявленных во время бета-тестирования.

В части 2 шагнем на следующий уровень, так как по прошествии целого месяца наши знания JavaFX, естественно, улучшились. Итак, начнем с нескольких конструкций языка, которые сейчас обязательно понадобятся

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

Дело в том, что процесс кодирования— важный, но далеко не единственный этап в жизненном цикле ПО. И современному ИТ-специалисту всегда следует помнить о том, что вокруг разработчика есть живые люди, с которыми нужно поддерживать грамотное общение на уровне обсуждаемой проблемы.

Сам язык программирования JavaFX имеет некоторое количество плюсов и минусов, на которых не будем останавливаться, поскольку это выходит за рамки данной статьи. Правда, об одном недостатке упомянуть все же стоит, потому что он напрямую связан с темой JavaFX.

голоса
Рейтинг статьи
Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector