Собрался я тут сегодня вечерком на досуге зашифровать папку в системе NTFS своими, так сказать, силами... Но увы - работа с папками - это не работа с файлами, что система мне сразу дала понять! Итак, после раздумий я понял, что для этого нужно любыми путями превратить папку в обыкновенный файл с расширением. Чтобы потом его (этот файл можно было зашифровать, а потом обратно расшифровать, и опять превратить в первоначальное вложение папок и файлов по прежнему адресу. Такие пути, как использование посторонних вещей, типа команды zip или вообще взять в помощники winrar - неохота. Стыдно как-то делать наполовину.Хочется всё своё! Короче, трудновато реализовать именно начальную логику. От чего отталкиваться, так сказать при превращении папки в файл. Примерно вижу такое направление:Рекурсивный поиск в самой верхней папке, ищу... Что именно? все файлы? Переписываю их содержимое в 1 файл (TEST.txt )... Хотелось бы спросить у опытных аналитиков, как пограмотнее организовать логику? P.S. ну aа если кто-то это уже реализовывал - от сырца не откажусь... С ув. Толстопуз.
Да хотелось бы своё написать... Чувствую, что реализовать это несложно... Просто начально оттолкнуться бы... Краткий "этюд" алгоритма набросать... Может кто посоветует начало?
Погугли описание формата RAR - все очень просто и красиво. Возьми себе готовую структуру. А алгос шифрования, метод сжатия если надо - это уже свое пиши
Да в том то и дело, что вот именно rar я не нашёл. Буду писать своё... Буду использовать рекурсивный поиск, и вписывать содержание каждого найденного файла в один общий файл... Если что, надеюсь что поможите. С уважением, толстопуз.
Ну вот, всю ночь парился... написал программу-архиватор, сканирует выбраную папку вместе со всеми подпапками, и записывает все найденые файлы (полный адрес и содержание) в отдельный файл C:\1.txt В таком вот виде: С:\полный адрес файла #13,10 Содержимое файла C:\Полный адрес следующего файла #13,10 содержимое файла и так далее... Хотелось бы чтобы опытные люди (например Mikl или другие ) посмотрели, можно ли что соптимизировать, или что неправильно, а то я всё-таки не очень силён пока... так-то всё работает, но мало ли... Да и насчёт оптимизации - не очень... Ну и потом после Ваших (надеюсь) советов и критики буду дописывать уже модуль распаковки этого архиватора. С уважением, Толстопуз.
чо в текстовике имена файлов в перемешку с бинарными данными? криво как то, надо какойто разделитель ставить. или вначале файла делать некую структуру в которой будут указатели на имена файлов,и данные для распаковки, а так же количество запакованых файлов
Вот я и думаю тоже - необходима сигнатура-разделитель. Хотел вот у вас совета спросить, у вас опыт-то приличный...
TOLSTOPUZ Код (Text): .686P .model flat include windows.inc includelib shell32.lib extern _imp__ShellExecuteA@24:dword .code start: xor ebx,ebx push ebx ; для исполнимых файлов - способ показа push ebx ; рабочий каталог push ebx ; командная строка push offset string ; имя файла с путем push ebx ; операция open или print (если NULL - open) push ebx ; идентификатор окна, которое получит сообщения call _imp__ShellExecuteA@24 ; ShellExecute(NULL,NULL,&string,NULL,NULL,NULL) retn .data string db 'dir >1.txt',0 end start или 'dir >1.txt' в командной строке выдает список всех файлов в ткущем каталоге в текстовый файл И еще, превратить папку в файл можно было еще DOS-функцией "сменить атрибут" там всего один бит в атрибуте файла меняешь и можешь получить из файла -> каталог или том или каталог превратить в файл (не знаю позволяет ли NTFS сейчас такие штуки) Бит Атрибут 0 Read only -Только для чтения (в этот файл нельзя писать и его нельзя удалять) 1 Hidden – невидимый 2 System – системный 3 Label -Метка диска 4 DIrectory – подкаталог 5 Archive – архивный 6 Не используется 7 Не используется 8 Разделяемый (Novell NetWare) Для определения атрибутов файла AX=4300h. В DSX - адрес строки с именем файла, строка заканчивается нулем и может содержать путь к файлу. Нет ошибки - CF = 0, в CX возвращаются атрибуты. Если ошибка - CF=1 в AX код ошибки Для установки атрибутов AX=4301h. В DSX адрес строки с именем файла, строка заканчивается нулем и может содержать путь к файлу. В CX новые атрибуты файла. Нет ошибки - CF=0. Ошибка - CF=1 в AX код ошибки. Теоретически, функция не может изменить метки тома или каталога (практически это возможно, но я не помню, как делал) 2FED как неэстетично
TOLSTOPUZ Перефразируя известную поговорку "Нет королевской дороги в математике" : ты хочешь чтобы тебя за ручку водили в программировании ? Ходи сам, иначе толку не будет. А отказ от использования готовых вещей - это глупость. Научится программировать все самому не удастся теперь - слишком много всего. А потом тебе никто и не предлагал tar копировать. Просто посмотри, как там это сделано. Изобрети что-то похожее. Куча примеров есть - найди похожее и разбери. А вообще судя по твоим вопросам - у тебя базы нет. Надо прочесть пару умных книжек и сразу перестанешь спрашивать "как?".
TOLSTOPUZ в опервых пути сохраняй относительные. Т.е. если пакуеш папку Folder и в ней есть ещё SubFolder, то пути сохраняй не C:\Path\Folder\SubFolder\SomeFile.txt, а Folder\SubFolder\SomeFile.txt Распаковывать ведь можно и в другую папку, главное структуру сохранить. А то ты так запакуеш на диске Е: что-нибудь, а у меня это CD-ROM к примеру или нет вообще И чего тогда? А насчёт формата - можно очень простой сделать. К примеру: <Signature> <FilePathLen><FilePath><FileDataLen><FileData>...<FilePathLen><FilePath><FileDataLen><FileData> Signature - подпись для идентификации что действительно твой файл. Можеш ник вписать FilePathLen - длина пути к файлу FilePath - относительный путь к файлу FileDataLen - длина файла FileData - содержимое файла
Действительно, явный просчёт, что я использую абсолютные пути. Будет сообщение об ошибке если диска нет. Спасибо за подсказку. Готовая структурка тоже интересна... Правильная. Я её наверное тисну, если не возражаете.