powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / [vb6.0 ]отрезаем фрагмент файла
25 сообщений из 73, страница 2 из 3
[vb6.0 ]отрезаем фрагмент файла
    #37174281
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрю,Ципихович Эндрюстранно что ключи в столбик два штуки подряд одинаковые, Ваден-Баден???Если так напрягает, то закомментируйте строку
Код: plaintext
Debug.Print skey

Ципихович ЭндрюГлавное, никакой автоматизации как этим пользоваться без этой интермедии, то есть есть файл - макрос испортить файл, макрос испорченный файл исправить??Хчешь быть счастливым, - будь им.(с)Козьма Прутков
Надо макрос "испортить файл/испорченный файл исправить", - напишите. Кто ж не даёт?
...
Рейтинг: 0 / 0
[vb6.0 ]отрезаем фрагмент файла
    #37174317
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотищаХ о чешь быть счастливым, - будь им.(с)Козьма Прутков
Надо макрос "испортить файл/испорченный файл исправить", - напишите. Кто ж не даёт?

Тряхнул стариной :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
Sub Испортить_файл()

'испортить можно только не открытый файл
Dim sFN$
'место расположения и имя требуемого испортить файла
sFN$ = "C:\Documents and Settings\user1\Рабочий стол\1.doc"

Dim f%
Dim i%
'ключ
Dim skey$
Dim b As Byte
Dim b0 As Byte

f = FreeFile
Open sFN For Binary As #f
For i =  1  To  5 
    Get f, i, b
    skey = skey & Hex(b)
    Put f, i, b0
Next i
Close #f

Debug.Print skey

End Sub

Sub Исправить_испорченный_файл()

Dim f%
Dim i%
Dim b As Byte

Dim sFN$
'место расположения и имя требуемого исправить ранее испорченого файла
sFN$ = "C:\Documents and Settings\user1\Рабочий стол\1.doc"
'ключ, который был получен, перед тем как испортить файл
Dim skey$
skey$ = "D0CF11E0A1"

f = FreeFile
Open sFN For Binary As #f
For i =  1  To  5 
    b = CByte("&H" & Mid(skey,  2  * i -  1 ,  2 ))
    Put f, i, b
Next i
Close f

End Sub

Вопрос назрел, перед испорчением можно его, код сохранить там внутри, наподобии
ActiveDocument.Variables.Add "Код", сам код
А затем его перед восстановлением взять оттуда и восстановить
2 Какова вероятность, что код кто то подберёт???
...
Рейтинг: 0 / 0
[vb6.0 ]отрезаем фрагмент файла
    #37174326
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрю,
сохранить можно запросто, а вот "взять оттуда перед восстановлением" уже будет несколько проблематично. Т.к. чтобы добраться до ActiveDocument.Variables надо этот "ActiveDocument" открыть в Word.
По поводу того, что "кто то код подберет" вразумительного ответа дать не могу, т.к. не знаю, что хранится в первых пяти байтах вордовского документа.
...
Рейтинг: 0 / 0
[vb6.0 ]отрезаем фрагмент файла
    #37174385
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотища, понял, спасибо, так и не понял, можно файлы портить устанавливая свой код для дальнейшего восстановления???
...
Рейтинг: 0 / 0
[vb6.0 ]отрезаем фрагмент файла
    #37174390
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрю,
можно, конечно.
Но это будет уже другая история(с).

Найдте в себе силы, разберитесь, ЧТО ИМЕННО делают функция cutfile и процедура restorefile. Бездумное копирование ничего Вам не даст...
...
Рейтинг: 0 / 0
[vb6.0 ]отрезаем фрагмент файла
    #37174402
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотища, ОК, начинаю разбираться, если что спрошу
...
Рейтинг: 0 / 0
[vb6.0 ]отрезаем фрагмент файла
    #37174412
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я конечно подддаюсь обучению, но не до такой же степени, первый тычёк
подскажите пожалуйста строка f = FreeFile
что делает, что такое "FreeFile", её проходишь f = 1 ???????
...
Рейтинг: 0 / 0
[vb6.0 ]отрезаем фрагмент файла
    #37174498
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрю,
встроенная справка - великая силаFreeFile Function

Returns an Integer representing the next file number available for use by the Open statement.

Syntax

FreeFile[(rangenumber)]

The optional rangenumber argument is a Variant that specifies the range from which the next free file number is to be returned. Specify a 0 (default) to return a file number in the range 1 – 255, inclusive. Specify a 1 to return a file number in the range 256 – 511.

Remarks

Use FreeFile to supply a file number that is not already in use.
ЗЫ: знание, хотя бы зачаточное, английского - обязательно.
...
Рейтинг: 0 / 0
[vb6.0 ]отрезаем фрагмент файла
    #37174639
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотища,

гугл выручает:
Функция FreeFile
Возвращает целое число, представляющее следующий номер файла доступны для использования в заявлении "Открыть".
Синтаксис
FreeFile [(rangenumber)]
Дополнительный аргумент rangenumber является вариант, который определяет диапазон, из которого следующий свободный номер файла должен быть возвращен. Укажите 0 (по умолчанию), чтобы вернуть файл число в диапазоне 1 - 255, включительно. Укажите 1, чтобы вернуться номер файла в диапазоне 256 - 511.
Замечания
Используйте FreeFile на поставку номер файла, который уже не используется.

Сейчас буду разбираться

Что придумал, после закрытия файла - автоматом портим его, а по открытию автоматом вызываем форму, ту которая появляется если файл был бы запаролен. Юзер увидел форму, побежал к знакомому, мол узнай код файла. Тот в недоумении нет кода. Класс?? Вопрос как Вам эта мысль??? Понятно, что в зависимости от квалификации друга у юзера он может понять, как поймёт???, как отличит???
...
Рейтинг: 0 / 0
[vb6.0 ]отрезаем фрагмент файла
    #37176115
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нмного прояснилось, подскажите пожалуйста, не пойму откуда в сроке: Get f, i, b
берётся b??
...
Рейтинг: 0 / 0
[vb6.0 ]отрезаем фрагмент файла
    #37176136
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю,

скукотищаЦипихович Эндрю,
встроенная справка - великая сила

GetGet Statement

Reads data from an open disk file into a variable.

Syntax

Get [#]filenumber, [recnumber], varname

The Get statement syntax has these parts:

Part Description
filenumber Required. Any valid file number.
recnumber Optional. Variant (Long). Record number (Random mode files) or byte number (Binary mode files) at which reading begins.
varname Required. Valid variable name into which data is read.

Remarks

Data read with Get is usually written to a file with Put.

The first record or byte in a file is at position 1, the second record or byte is at position 2, and so on. If you omit recnumber, the next record or byte following the last Get or Put statement (or pointed to by the last Seek function) is read. You must include delimiting commas, for example:

Get #4,,FileBuffer

Если что и непонятно - то только ваш вопрос. Поскольку "переменной b" там "браться откуда-то" незачем.
GET - это процедура, которая (в вашем случае) помещает увквзанный байт из файла в эту переменную ...
...
Рейтинг: 0 / 0
[vb6.0 ]отрезаем фрагмент файла
    #37176200
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM, да уж справка великая сила, итак GET, гугл тут как тут:
Получить Заявление
Читает данные из открытого файла на диске в переменную.
Синтаксис
Получить [#] НомерФайла, [recnumber], VarName
Получить заявление синтаксис этих частей:
Часть Описание
Номер_файла обязательно. Любой допустимый номер файла.
recnumber Факультативного. Variant (Long). Рекордное число (Случайные файлы режиме) или номер байта (двоичные файлы режиме), при которой начинается чтение.
VarName обязательно. Допустимое имя переменной, в которой данные считываются.
Замечания
Данные, считываемые с Получите, обычно записываются в файл с нанесенными.
Первая запись или байт в файле находится в позиции 1, вторая запись или байт в положение 2, и так далее. Если вы опустите recnumber, следующая запись или байт, следующий за последним Получить или положить заявление (или, на который указывает последняя функция Seek) читается. Вы должны включить разграничения запятыми, например:
Получить # 4,, FileBuffe

Где Вы это всё ищете? Далее чтобы не утомлять ищу в справке ВБА Put - Поиск не дал результатов, так же как и Get горе
Одним словом всё равно пока не доходит
В то же время после строки
Open sFN For Binary As #f
вставил
Код: plaintext
1.
2.
3.
Количество_открытых_документов_Word = Documents.Count
For i =  1  To Documents.Count
MsgBox (Documents.Item(i).Name & " - документ номер " & i)
Next 
Количество_открытых_документов_Word стало равно 1
Странно, в этот момент на панели задач было два файла Ворд
не считая того что я так и не понял строкой Open sFN For Binary As #f
я его открыл ли?
Нужны подсказки, пожалуйста
...
Рейтинг: 0 / 0
[vb6.0 ]отрезаем фрагмент файла
    #37176277
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эндрю, вам же советовали:
ЗЫ: знание, хотя бы зачаточное, английского - обязательно.Добавлю: собственое знание , а не умение "переводить электронными переводчиками".

Кроме того, начните уже разбираться в коде, а не постоянно использовать готовый.
Мыслите алгоритмами, а не кусками кода VBA.
Я вот специально "не стал замечать" кое-какие фичи в приведённом вам Скуткотищей примере. Ибо сам грешен тем же...

Ну и по вашему последнему вопросу - а с какого перепугу вы решили, что процедура OPEN [#] имеет отношение к Application.Open()?
Низкоуровневый доступ к любому файлу в ФС, и открытие приложением собственного хранилища данных - это как бэ две разные вещи...
...
Рейтинг: 0 / 0
[vb6.0 ]отрезаем фрагмент файла
    #37176465
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMЯ вот специально "не стал замечать" кое-какие фичи в приведённом вам Скуткотищей примере
Уажаемый Скуткотища, есть код без фичи, может там что пойму, спасибо
...
Рейтинг: 0 / 0
[vb6.0 ]отрезаем фрагмент файла
    #37176508
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрю,
слона то я и не заметил фич в вышеприведенном коде не наблюдаю. Там всё просто, как двери. Открыть файл, считать байт, обнулить байт, преобразовать число в его шестадцатеричное представление, соединить строки.
...
Рейтинг: 0 / 0
[vb6.0 ]отрезаем фрагмент файла
    #37178034
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотища, и как в эту ясность:
Открыть файл, считать байт, обнулить байт, преобразовать число в его шестадцатеричное представление, соединить строки.
Втиснуть:
чтобы не мне выдавало код, а я заказывал его

Увы для меня, это не почти тоже самое, что 2+2+2=2*3
...
Рейтинг: 0 / 0
[vb6.0 ]отрезаем фрагмент файла
    #37178038
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а почему именно в шестадцатеричное представление???
...
Рейтинг: 0 / 0
[vb6.0 ]отрезаем фрагмент файла
    #37178247
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрюскукотища, и как в эту ясность:
Открыть файл, ...
Втиснуть:
чтобы не мне выдавало код, ...Не код! Первые пять байт файла...

Ципихович Эндрю..., а я заказывал егоДля начала, - определиться с методом "шифрования".

Ципихович Эндрюа почему именно в шестадцатеричное представление??? Решил результат сохранять в строковой переменной. Для данной задачи (сохранить пять первых байт вордовского документа) Hex(x) понравилось больше, чем Format(x,"000") или конкатенация с разделителем. Всё изложенное - сугубо имхо.
...
Рейтинг: 0 / 0
[vb6.0 ]отрезаем фрагмент файла
    #37178422
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотища,

И будем ещё говорить, что не было особенностей?
Ладно, распишу "фичи" для ЦЭ (сугубое ИМХО, и если меня поправите - не обижусь)
Итак
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Function cutfile$(sFN$)
' здесь Автором указано, что описываем "функцию", причём возвращающую символьное значение, причём параметром для этой функции тоже является символьное значение. В идеологии VB - переменные будут приведены к данному типу при исполнении кода.
Dim f%, i%, skey$
' здесь Автор заводит локальные переменные, причём указанных типов
' также запомним, что при явном указании типа переменная инициализируется "пустым" значением данного типа
Dim b As Byte, b0 As Byte
' здесь то же самое, что выше
f = FreeFile
' это уже обсудили. Замечу, что =FreeFile() возвращает число - указатель на файл, либо код ошибки
' при этом, если всё нормально - файл оказывается открытым для прямого доступа
Open sFN For Binary As #f
' во-первых, ЦЭ надо изучить действие OPEN, затем опцию FOR BINARY, затем ещё понять, почему указано именно #f, а не просто f...
For i =  1  To  5 
' это мы делаем цикл со счетчиком от 1 до 5
    Get f, i, b
' это получаем из файла, открытого с номером f, байт под номером i, и записываем это байт в переменную b (числовую)
    skey = skey & Hex(b)
' это мы добавляем справа в символьную переменную символьное же значение прочитанного байта в шестнадцатиричном формате
    Put f, i, b0
' а это мы пишем прямо в файл на место запомненного байта - содержимое из переменной b0. Как помним, проинициализированную  значением 0.
Next i
Close #f
' закрываем файл
cutfile = skey
' ну и возвращаем в качестве значения функции - сформированный нами символьный код первых пяти байт
Debug.Print skey
End Function

С точки зрения программиста - код почти идеален (ну, можно было еще добавить параметрами количество байт, вид операции замены...) С точки зрения нуба - "код делает что-то, но в тонкости мы не вдаёмся".
Так что я остаюсь на своей позиции - надо учить пониманию алгоритмов, а не давать готовые примеры. Иначе... - будем иметь новую Висту
...
Рейтинг: 0 / 0
[vb6.0 ]отрезаем фрагмент файла
    #37178444
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,
Код: plaintext
1.
2.
3.
f = FreeFile
' это уже обсудили. Замечу, что =FreeFile() возвращает число - указатель на файл, либо код ошибки
' при этом, если всё нормально - файл оказывается открытым для прямого доступа
поправляю: файл оказывается открытым после выполнения инструкции Open.

ОФФ:AndreTM
Код: plaintext
1.
'... затем ещё понять, почему указано именно #f, а не просто f...
Сознаюсь: до сих пор не знаю, в чем "фича" записи #f в сравнении с просто f

AndreTMТак что я остаюсь на своей позиции - надо учить пониманию алгоритмов, а не давать готовые примерыДля меня "готовые примеры" всегда были лучшим пособием для "понимания алгоритмов". Не знаешь, что делает та или иная встроенная функция, - RTFM, не понимаешь, КАК работает тот или иной участок кода, - дебаггер в зубы и вперед за орденами... А когда уж совсем туго, - к людям за сочувствием.
...
Рейтинг: 0 / 0
[vb6.0 ]отрезаем фрагмент файла
    #37178464
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотища,

Ага, по поводу OPEN - исправляюсь. Но написано-то было не для нас, а для них...

А вот другой камент надо прямо ЦЭ и демонстрировать: RTFM->Debugger->Forum. Вместо "What is shit?"->Forum->Flame
...
Рейтинг: 0 / 0
[vb6.0 ]отрезаем фрагмент файла
    #37178499
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM, ПОНЯЛ, надо в строке:
Код: plaintext
1.
2.
3.
 Get f, i, b
' это получаем из файла, открытого с номером f, байт под номером i, и записываем это байт в переменную b (числовую)
    skey = skey & Hex(b)
НАПИСАТЬ, НАПРИМЕР:
Код: plaintext
1.
2.
Get f, i, b
' это получаем из файла, открытого с номером f, байт под номером i, и записываем это байт в переменную b (числовую)
    skey = skey &  1 
и КОД будет 11111
тогда когда исправляю файл, на строке
Код: plaintext
b = CByte("&H" & Mid(skey,  2  * i -  1 ,  2 ))
получаю ошибку 13 type mismaht ?????? ПОЧЕМУ
...
Рейтинг: 0 / 0
[vb6.0 ]отрезаем фрагмент файла
    #37179275
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 - это число, надо (хотя и непринципиально)
Код: plaintext
skey - skey & "1"
Ну и вообще-то смысла править именно эту строку нет, поскольку тогда вы обнулите первые пять байт в файле, а что именно порезали - знать не будете. Там суть возвращаемого значения как раз в том, что это те байты, которые мы "вырезали".
Ну и кроме того, пять байт в шестнадцатиричном символьном формате - это строка из десяти сиволов, а вы пытаетесь подпихнуть для обратного преобразования строку всего из пяти символов. Вот при i=4 и получаем CByte("&H") , что интерпретатору непонятно...
...
Рейтинг: 0 / 0
[vb6.0 ]отрезаем фрагмент файла
    #37179923
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM, КАК КАЧЕЛИ ТО ПОНЯТНО ТО НЕ ОЧЕНЬ
ПОДСКАЖИТЕ ПОЖАЛУЙСТА, КАК УКАЗАТЬ КОД, А ПОТОМ СОГЛАСНО ЕГО "ПОВРЕДИТЬ" ФАЙЛ
...
Рейтинг: 0 / 0
[vb6.0 ]отрезаем фрагмент файла
    #37183184
DMK67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал испортить файл GIF. Портится как положено... но не восстанавливается....
...
Рейтинг: 0 / 0
25 сообщений из 73, страница 2 из 3
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / [vb6.0 ]отрезаем фрагмент файла
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]