Что нового

[Файловая система] Синхронизация папки с шифрованием

delfin

Новичок
Сообщения
7
Репутация
0
Необходимо динамически синхронизировать две папки,
причём в одной из них файлы должны находится в зашифрованном виде.
Для файлов вроде получилось (вложение Synhr2.au3)
используя атрибут файла "архивировать" который устанавливается при создании, перемещении или изменение файла

Но как обработать вложенные папки не могу понять , по атрибуту не получится так как в отличии от папок он при перемещении/переименовании папки не изменяется
Да и что делать с пустыми папками тоже не понятно :stars:
 
Автор
D

delfin

Новичок
Сообщения
7
Репутация
0
Александр
Уже смотрел (v2.0.0.5) :
1 слишком большой интервал проверки
2 не правильно отрабатывает появления файла во второй папке (не смотря на то что стоит чексбокс "двухсторонняя синхронизация" )
3 не отрабатывает удаление файла во второй папке

Скачал SynFolders 3.0 - тоже работает с ошибкой :( , новые файлы исправно копируются из папки в папку , а вот при удалении файла в папке вместо того чтобы удалить этот файл в другой SynFolders востанавливаетт его

подозреваю и за того что отключена запись последнего доступа к файлу

:scratch:хотя может я не совсем в настройках разобрался
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
delfin [?]
а вот при удалении файла в папке вместо того чтобы удалить этот файл в другой SynFolders востанавливаетт его
А вы в какой папке удаляете файл? Если из папки назначения - то все верно. В исходной папке файл есть, а в назначении нету - непорядок, нужно скопировать.
 
Автор
D

delfin

Новичок
Сообщения
7
Репутация
0
Medic84
В том то и дело , что нужна полная двухнаправленность синхронизации :'(
То есть при удалении файла в любой папке он должен удалятся и в другой
Причем скрипт должен корректно обрабатывать файлы занятые другими программами - ждать пока файл освободится

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

С файлами задачу решил (Synhr2.au3), а вот с папками непонятка
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
delfin
Нет, ну вы интересный. А как программе определить на какую папку ровняться то? Надо же с чем то сравнивать.
 

running-frag

why me?
Сообщения
441
Репутация
60
Если вопрос стоит без "удаление\создание" папок (т.к. действительно ровнять непонятно на кого) тогда всё просто. Смотрит на дату создания файла в одном месте и сравниваем с датой в другом. И согласно этим данным уже "перезаписуем те файлы где дата меньше". При этом к каждому файлу отдельная проверка по дате. Если файла нет - тут тоже непонятка, на кого ровнятся.


Добавлено:
Сообщение автоматически объединено:

Для начала "придумайте" чёткие правила для своего синхронизатора. Потому что сейчас "пальцем по воде", не понятно что с чем синхронизировать (а именно папки и удалённые файлы).

Возьми за основу тот же Subversion. Сделайте по его принцепам (если ты вкурсе что это такое).

PS: Любая программа это чёткий агроритм. Шаг вправо - шаг влево - попытка к бегству - расстрел. По которому она выолняется. Если нет алгоритма, тогда как мы будем её писать? В данный момент вы хотите что бы "фотошоп" выполнял функции "торрент клиента", т.е. разница "что хочется и что можется" разная.

 
Автор
D

delfin

Новичок
Сообщения
7
Репутация
0
[box title=running-frag]Для начала "придумайте" чёткие правила для своего синхронизатора.[/box]
Вроде бы так :
8399621_1024x632.png
[box title=Medic84 ]А как программе определить на какую папку ровняться то?[/box]
Долго ломал над этим вопросом голову , решил использовать файл Desktop.ini добавив в него параметр в который записывается полное имя папки.
Вот только какое имя секции правильно выбрать DeleteOnCopy.A или DeleteOnCopy.W не могу понять.
Если файл Desktop.ini отсутствует, или нет параметра, или имя не соответствует папке значит это новая папка
Приходится перед записью или чтением снимать атрибуты "скрытый" "системный" ,а затем ставить их обратно

Удалось получить синхронизацию с подкаталогами (вложение Synhr3.au3).
Но есть проблема с шифрованием имён файлов
При шифровании не всегда получаются корректные имена и это вызывает ошибку
вот функция для шифрования имени:
Код:
#Include <Crypt.au3>

Func CryptName  ($sName , $vCryptKey , $iMode=2 )
$sName= StringToBinary ( $sName , $iMode )
	If @error Then
		SetError(1)
		Return 
	EndIf
$sName=_Crypt_EncryptData($sName , $vCryptKey, $CALG_USERKEY)
	If @error Then
		SetError(2)
		Return
	EndIf
$sName= BinaryToString   ($sName , $iMode )
	If @error Then
		SetError(3)
		Return
	EndIf
Return $sName
EndFunc

Заодно узнал об особенности функции
Код:
$hSearch = FileFindFirstFile ( $sDirInp & "\*" )

первый результат выдаваемый функцией
Код:
$sFile = FileFindNextFile ( $hSearch )

".." если $sDirInp указывает на папку не в корне диска
И за этого скрипт чуть не стер жёсткий :'(
 
Автор
D

delfin

Новичок
Сообщения
7
Репутация
0
Отказался от шифрования имен файлов , тему считаю закрытой
 
Верх