Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Объединение файлов


Автор: Kirill89 4.12.2006, 00:21
Вопрос немного не по vb, но надеюсь, что кто нибудь сталкивался с моей проблемой:
У меня есть программа, читающая информацию из "базы". База представляет собой несколько файлов с информацией.
Код

Open "файл" For Input As #1
Input #1,  информация
Close #1

Мне нужно получить один файл (нечто вроде пакета или библиотеки dll), который НЕ будет являться папкой, но доступ к нему из visual basic'a будет вида
Код

Open "пакет/файл" For Input As #1
Input #1,  информация
Close #1

тоесть чтобы когда user откроет файл блокнотом, он не увидит там того, что лежит в файлах "базы", и этот "пакет" можно было заменить на другой целиком... (не как папку)

Зарание прошу прощения за путаницу в вопросе.

Автор: mihanik 4.12.2006, 08:16
Эта программа будет использоваться на каком-то конкретном компе, или "вообще"?
Если на конкретном компе, то сразу вопрос о файловай системе.

Если NTFS, то можно использовать альтернативные потоки данных.
Тогда всё это будет выглядеть в точности так же, как ты и описАл.

Смотреть http://forum.vingrad.ru/index.php?showtopic=115802&view=findpost&p=883749

Автор: Akina 4.12.2006, 12:20
Код

Open "пакет/файл" For Input As #1
Input #1,  информация
информация = Decrypt(информация)
Close #1

где функцию Decrypt и комплементарную ей Encrypt можно строгать по своему разумению или пользовать любую доступную (скажем от PGP).

Автор: mihanik 4.12.2006, 13:42
Akina, по-моему, ты не совсем прав...

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

Хотя идея с шифрованием, думаю, здесь может пригодиться!

Автор: Kirill89 4.12.2006, 14:11
Шифрование я тоже использую, но речь не об этом. Оснавная задача такого "пакета" - удобная работа с несколькоми такими. Например: В папке 3 файла, что-бы user их обновил через и-нет или программу управления, он должен так или иначе работать со всеми 3-мя файлами. А если таких папок 100, то 3*100 и работа сильно усложняется... А "пакет"-простой способ решения такой задачи.

Ну, и может я ошибаюсь, но делают вед как-то *.exe, которые в себе несколько файлов содержат, и доступ вроде к ним есть c:\setup.exe/file.dll ? - может так как-то можно?

Автор: mihanik 4.12.2006, 14:20
Ага!

СТОП!!!

Давай вернёмся к началу smile 
Чтобы правильно и быстро решить вопрос, его нужно толково сформулировать.

Какую задачу ты сейчас решаешь, что задаёшь такой вопрос.
Может, можно будет как-то обойтись другими способами решения.

Сформулируй изначальную задачу поточнее!!!

Автор: Kirill89 4.12.2006, 14:24
Нужен файл в котором будет несколько других файлов. просто для простоты работы, прога со сменными "базами". Удалить одну, скопировать вторую... Нечто вроде архива без сжатия.

Автор: mihanik 4.12.2006, 14:29
Дык...
Тогда и используй файл БД.

Например, access...

Там в одном файле могут содержаться несколько таблиц с данными...

Не то что-то говорю?  smile 

Автор: Kirill89 4.12.2006, 14:33
Цитата(mihanik @ 4.12.2006,  14:29)
Тогда и используй файл БД.

в visual basic 6.0?


Я слышал что у fat'a есть пометка о том, является ли файл папкой. Может так как-нибудь?

Автор: mihanik 4.12.2006, 14:38
А что?

Автор: Kirill89 4.12.2006, 14:40
А как?

Добавлено @ 14:41 
Цитата(mihanik @ 4.12.2006,  14:40)
Подключаешься к БД и работаешь.

И не важно, какой язык ты используешь.
В поиске найдёшь множество примеров подключения к БД...


Цитата(Kirill89 @  4.12.2006,  14:33 Найти цитируемый пост)
Я слышал что у fat'a есть пометка о том, является ли файл папкой. Может так как-нибудь? 

Не думаю, что это хорошая мысль...

1- ясно
2-почему?

Автор: mihanik 4.12.2006, 14:40
Подключаешься к БД и работаешь.

И не важно, какой язык ты используешь.
В поиске найдёшь множество примеров подключения к БД...


Цитата(Kirill89 @  4.12.2006,  14:33 Найти цитируемый пост)
Я слышал что у fat'a есть пометка о том, является ли файл папкой. Может так как-нибудь? 

Не думаю, что это хорошая мысль...

Автор: mihanik 4.12.2006, 14:41
Где-то и у меня был примерчик...

Ща поищу...

Погодь минут 5...

Автор: Kirill89 4.12.2006, 14:43
Цитата(mihanik @ 4.12.2006,  14:41)
Погодь минут 5...

Мне уходить к сожалению надо, вечером намишу.

Автор: mihanik 4.12.2006, 14:43
Код

     ' Подключаемся к базе данных по письмам
    strDBPath = GetSetting("Mihanik", "Outlook2003", "DBPath", "")
    strDBName = GetSetting("Mihanik", "Outlook2003", "DBFileName", "")
    strConnect = ";database=" & strDBPath & strDBName
    Set MyDB = OpenDatabase("", True, False, strConnect)
    Set MyRecordSet = MyDB.OpenRecordset("Respondents", dbOpenDynaset)

    ' Перебираем сегодняшние письма и при необходимости отсылаем письма по нужному адресу
    strCriteria = "[SentOn] >= " + CStr(CDbl(MyDate))
    
    While InStr(strCriteria, ",") <> 0
        Mid(strCriteria, InStr(strCriteria, ","), 1) = "."
    Wend
    
    MyRecordSet.FindFirst (strCriteria)
    
    Do While Not MyRecordSet.NoMatch
        If MyRecordSet.Fields("SentOnP1") = 36526 And MyRecordSet.Fields("EMail") <> "None" Then
            Set MyLetter = AllLetters.add
            MyLetter.HTMLBody = TextFromFile(GetSetting("Mihanik", "Outlook2003", "Pattern1", ""))
            MyLetter.To = MyRecordSet.Fields("EMail")
            MyLetter.Subject = "Answer_1 to " + MyRecordSet.Fields("IDNumber")
            MyLetter.Send
            MyRecordSet.Edit
            MyRecordSet.Fields("SentOnP1") = CDbl(Now())
            MyRecordSet.Update
        End If
        MyRecordSet.FindNext (strCriteria)
        If StopMyScript Then GoTo ending
    Loop

Автор: Kirill89 4.12.2006, 22:19
Это интерсно, но не то,что мне нужно... Неужели никто не сталкивался с такой проблемой?
Может ктонибудь знает всё-таки? Или компонент есть какой?

Автор: Akina 4.12.2006, 23:21
А чем тебя, собсно, не устраивает именно файл архива? тот же ZIP, но без сжатия? распаковывается системными средствами...

Или уж совсем стандартный путь - DLL, не содержащая ничего, кроме пакета ресурсов? так и скины, и multilanguage делают - и тебе сойдет.

Автор: Kirill89 4.12.2006, 23:28
Цитата(Akina @ 4.12.2006,  23:21)
Или уж совсем стандартный путь - DLL, не содержащая ничего, кроме пакета ресурсов? так и скины, и multilanguage делают - и тебе сойдет.

Вот! То что мне нужно! Как это делать?

Добавлено @ 23:32 
Цитата(Akina @ 4.12.2006,  23:21)
А чем тебя, собсно, не устраивает именно файл архива? тот же ZIP, но без сжатия? распаковывается системными средствами...
сойдет.

Если можно, то расскажи и этот вариант, но сначала первый )

Автор: Akina 5.12.2006, 01:02
Цитата(Kirill89 @  5.12.2006,  00:28 Найти цитируемый пост)
Как это делать?

Создать новый проект - ActiveX DLL. При помощи редактора ресурсов натолкать туда все что нужно... после чего вызывать из своего проекта.

Цитата(Kirill89 @  5.12.2006,  00:28 Найти цитируемый пост)
Если можно, то расскажи и этот вариант

Система работает с ZIP-архивом как с папкой. Вообще не требуется дополнительного кода. Только в UNC слэши прямые...

Автор: Kirill89 5.12.2006, 10:36
Цитата(Akina @ 5.12.2006,  01:02)
1)Создать новый проект - ActiveX DLL. При помощи редактора ресурсов натолкать туда все что нужно... после чего вызывать из своего проекта.

2)Система работает с ZIP-архивом как с папкой. Вообще не требуется дополнительного кода. Только в UNC слэши прямые...

1)Пробовал пихает хорошо, а читать не хочет(
2)вообще не читает(((

Пожалуйста, побольше примеров! Очень прошу, доходчево растолкуй что к чему!

Автор: Kirill89 6.12.2006, 21:36
Неужели никто не сталкивался с подобной проблемой? По этому вопросу мне очень нужна помшь. Пожалуйста, подскажите хоть ссылку, где это можно найти.

Автор: Kirill89 7.12.2006, 11:12
Так, я скачал интересный пример (исходник) по работе с ресурсами, только сам пока в нём ничего не понял... Может кто-нибудь раберётся... Если добьюсь результатов, наверное стоит добавить это в faq.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)