Как превратить папку в файл?

Тема в разделе "WASM.BEGINNERS", создана пользователем TOLSTOPUZ, 5 май 2008.

  1. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Собрался я тут сегодня вечерком на досуге зашифровать папку в системе NTFS своими, так сказать, силами...
    Но увы - работа с папками - это не работа с файлами, что система мне сразу дала понять!

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

    Такие пути, как использование посторонних вещей,
    типа команды zip или вообще взять в помощники winrar
    - неохота. Стыдно как-то делать наполовину.Хочется всё своё!

    Короче, трудновато реализовать именно начальную логику. От чего отталкиваться, так сказать при превращении папки в файл.

    Примерно вижу такое направление:Рекурсивный поиск в самой верхней папке, ищу... Что именно? все файлы? Переписываю их содержимое в 1 файл (TEST.txt )...
    Хотелось бы спросить у опытных аналитиков, как пограмотнее организовать логику?

    P.S. ну aа если кто-то это уже реализовывал - от сырца не откажусь... :)

    С ув. Толстопуз.
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    посмотри сорсы tar - давно реализовано уже
     
  3. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Это что такое? где оно?
     
  4. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Набрал в местном поиске слово tar
    Скрипт мне выдал 68 страниц...
     
  5. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    tar это архиватор
     
  6. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Да хотелось бы своё написать...
    Чувствую, что реализовать это несложно...
    Просто начально оттолкнуться бы...
    Краткий "этюд" алгоритма набросать... Может кто посоветует начало?
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    TOLSTOPUZ
    http://ru.wikipedia.org/wiki/Tar
     
  8. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Погугли описание формата RAR - все очень просто и красиво. Возьми себе готовую структуру. А алгос шифрования, метод сжатия если надо - это уже свое пиши
     
  9. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Да в том то и дело, что вот именно rar я не нашёл.
    Буду писать своё...
    Буду использовать рекурсивный поиск, и вписывать содержание каждого найденного файла в один общий файл...
    Если что, надеюсь что поможите.
    С уважением, толстопуз.
     
  10. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Ну вот, всю ночь парился...
    написал программу-архиватор, сканирует выбраную папку
    вместе со всеми подпапками, и записывает
    все найденые файлы (полный адрес и содержание)
    в отдельный файл C:\1.txt

    В таком вот виде:
    С:\полный адрес файла #13,10
    Содержимое файла
    C:\Полный адрес следующего файла #13,10
    содержимое файла
    и так далее...

    Хотелось бы чтобы опытные люди (например Mikl или другие )
    посмотрели, можно ли что соптимизировать,
    или что неправильно, а то я всё-таки не очень силён пока...
    так-то всё работает, но мало ли...
    Да и насчёт оптимизации - не очень... :)

    Ну и потом после Ваших (надеюсь) советов и критики
    буду дописывать уже модуль распаковки этого архиватора.

    С уважением, Толстопуз.
     
  11. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    вего то, нужно было набрать "dir >1.txt"
     
  12. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    dir > 1.txt

    Не работает эта структурка...
    Только файл в файл у меня получается...
     
  13. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    чо в текстовике имена файлов в перемешку с бинарными данными? криво как то, надо какойто разделитель ставить. или вначале файла делать некую структуру в которой будут указатели на имена файлов,и данные для распаковки, а так же количество запакованых файлов
     
  14. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Вот я и думаю тоже - необходима сигнатура-разделитель.
    Хотел вот у вас совета спросить, у вас опыт-то приличный...
     
  15. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    TOLSTOPUZ
    Код (Text):
    1. .686P
    2. .model flat
    3. include windows.inc
    4. includelib shell32.lib
    5. extern _imp__ShellExecuteA@24:dword
    6. .code
    7. start:  xor        ebx,ebx
    8.         push       ebx          ; для исполнимых файлов - способ показа
    9.         push       ebx          ; рабочий каталог
    10.         push       ebx          ; командная строка
    11.         push       offset string   ; имя файла с путем
    12.         push       ebx          ; операция open или print (если NULL - open)
    13.         push       ebx          ; идентификатор окна, которое получит сообщения
    14.         call  _imp__ShellExecuteA@24 ; ShellExecute(NULL,NULL,&string,NULL,NULL,NULL)
    15.     retn
    16. .data
    17. string db 'dir >1.txt',0
    18. 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. В DS:lol: X - адрес строки с именем файла, строка заканчивается нулем и может содержать путь к файлу. Нет ошибки - CF = 0, в CX возвращаются атрибуты. Если ошибка - CF=1 в AX код ошибки
    Для установки атрибутов AX=4301h. В DS:lol: X адрес строки с именем файла, строка заканчивается нулем и может содержать путь к файлу. В CX новые атрибуты файла. Нет ошибки - CF=0. Ошибка - CF=1 в AX код ошибки. Теоретически, функция не может изменить метки тома или каталога (практически это возможно, но я не помню, как делал)
    2FED как неэстетично :dntknw:
     
  16. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    вызов стороннего приложения это как то через (_'_)
     
  17. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    TOLSTOPUZ
    Перефразируя известную поговорку "Нет королевской дороги в математике" : ты хочешь чтобы тебя за ручку водили в программировании ? Ходи сам, иначе толку не будет. А отказ от использования готовых вещей - это глупость. Научится программировать все самому не удастся теперь - слишком много всего.
    А потом тебе никто и не предлагал tar копировать. Просто посмотри, как там это сделано.
    Изобрети что-то похожее. Куча примеров есть - найди похожее и разбери.
    А вообще судя по твоим вопросам - у тебя базы нет. Надо прочесть пару умных книжек и сразу перестанешь спрашивать "как?".
     
  18. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    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 - содержимое файла
     
  19. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Действительно, явный просчёт, что я использую абсолютные пути. Будет сообщение об ошибке если диска нет. Спасибо за подсказку.
    Готовая структурка тоже интересна... Правильная. Я её наверное тисну, если не возражаете.
     
  20. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Если б возражал я б сдесь этого не писал :)
    Используй конечно.