Имя: Пароль:
1C
 
ПереЗаписать в файл (большой 100 Гигов) заголовок (выбор среды разраб. и библ.)
,
0 Вуглускр1991
 
08.06.15
12:53
Привет!
Появилась задача: в большом файле сделать изменения, в заголовок зафигачить новые данные.
Понимаю, что могу это написать на С++, на классическом C, на Паскале, на АСМе, и даже выпендриться и написать на 1С.
Однако, в данной задаче требуется знание тех объектов и библиотек, которые будут использованы.
Нужно максимально надежно, максимально близко к объектам ОС (Windows 7 64бит).
Что посоветуете выбрать?
5 MMF
 
08.06.15
14:58
А потом появится тема "шифровальщик затер заголовки файлов mdf больших баз" :-)
6 Вуглускр1991
 
08.06.15
15:01
(5) Ты практически прав, но все в обратной последовательности: сперва появился шифровальщик, потом люди сделали заказ.
А почему mdf?
7 MMF
 
08.06.15
15:05
(6) да вот как-то сходу файлов больше 100 Гб других и не придумать... А люди знают, что исполнитель - не разбирается в вопросе?
8 Вуглускр1991
 
08.06.15
15:15
(7) Я ищу исполнителей, которые разбираются в вопросе.
9 Вуглускр1991
 
08.06.15
15:15
(8+) но если не найду, то сделаю сам, проконсультировавшись ...
10 D_E_S_131
 
08.06.15
15:20
Как "заказчикам"-то не поперло — с начала шифровальщик данные запоганил, а потом расшифровщик окончательно данные убьет.
11 Вуглускр1991
 
08.06.15
15:26
(10) Я не занимаюсь расшифровкой.
12 Кирпич
 
08.06.15
15:45
(2) какая разница какого размера файл? Или ты мыслишь как одинесник: загрузить весь файл в память, а потом записать? :))
13 Кирпич
 
08.06.15
15:46
просто записать в файл - это пять строчек код. и пофигу сколько там у тебя гигов или килобайт.
14 ILM
 
гуру
08.06.15
15:50
hexeditor уже предлагали?
15 Вуглускр1991
 
08.06.15
15:54
(12) Когда я написал свой DCOM сервер, тоже были мысли типа таких, а оказалось что права надо давать, порты надо открывать, службы надо запускать, в среде wind2003 все работает как надо, в среде win2008 все работает с пинками, а  в среде windows 8.1 все не работает бог знает почему.
Здесь тоже, надо иметь опыт и быть специалистом.
Как поведет себя UAC? Защитник Windows? А нет ли ещё какой-нибудь службы инспекции? Нет ли чего-нибудь, что помешает?
А по нехватки памяти - тоже может быть, смотря каким уровнем абстракции пользоваться.
Я если б знал, чего там бывает, я бы не спрашивал.
Это программа типа "hello world", но от реализации очень много зависит.
(14) В winhexe руками я сделал все, что нужно и все получилось, теперь мне нужна автоматизация для кучи файлов.
16 MMF
 
08.06.15
15:57
(15) да тебе всего то нужно CreateFile + SetFilePointer + WriteFile ... ну или обертки на любом языке вокруг api
17 Кирпич
 
08.06.15
15:59
(15) у как всё сложно то. не боись. windows тебе напишет, если нету доступа. больше камне йнету. пиши свои 10 строчек и не парься.
18 trdm
 
08.06.15
15:59
(4) она для текстовых.
19 DmitrO
 
08.06.15
16:01
(16)угу, причем при реализации на любых языках/библиотеках, в конечном счете и будут вызываться именно эти функции из Kernel32.dll :)
20 Вуглускр1991
 
08.06.15
16:02
(16) Спасибо, рою в этом направлении ...
(17) Пусть напишет, но только сейчас, чтобы я это увидел, а не через полгода, когда я уже забуду обо вс ем, что было связано с проектом и данные исчезнут с радаров заказчика.
21 DmitrO
 
08.06.15
16:02
вообще не понимаю что тут автор вымораживает..
22 trdm
 
08.06.15
16:02
#include <fstream.h>
void main()
{
      fstream File("test.bin",ios::out | ios::in | ios::binary);
      int address = 0;
      char ch = 'a';
      File.seekg(ios::beg); //go to the beginning of the file
      while (ch != 'K')
      {
          File.get(ch); //read one character
          if (ch == 'K')
          {
              cout << address;
              File.seekg(-1);
              File.put('k');
          }
          address++;
      }
      File.close();
}
23 trdm
 
08.06.15
16:04
Какой-то кривой текст..
24 Вуглускр1991
 
08.06.15
16:04
(21) Автор не знает, имеет негативный опыт использования курсовых по программированию в условиях продакшна и "дует на воду".
25 Кирпич
 
08.06.15
16:07
(21) ага. тролль какой то. в каждой книжке про программирование написано как писать в файлы, а он тут про какие то библиотеки и подводные камни. это называется паранойя
26 Вуглускр1991
 
08.06.15
16:15
(25) Да, это называется паранойя, и она говорит мне,
что в случае использования дот-нета с его Using System ... можно найти комп на котором не установлен нужной версии дотнет и на нем облажаться,
а в случае использования студии, может стать необходимым редистрибьютабл пак, которого также может не оказаться.
Мне нужны самые базовые обертки к вызовам kernel32.dll самы примитивные и простые абстракции, чтобы минимально зависеть от доставляемых к операционке пакетов, и в то же время самые надежные, чтобы ни одна служба не помешала писать в файл. И уж если говорить о реализации - чтобы операционка не читала все 100 Гиг секторов, кластреов и екстентов в которых этот файл лежит, а ровно первые 10 начальных с заголовком. Чтобы никаких "нет места на диске", ещё один файл с таким же размером не помещается в раздел.
27 Вуглускр1991
 
08.06.15
16:16
(22) Спасибо за рыбу .. это С++ похоже. Возьму как основу.
28 Кирпич
 
08.06.15
16:25
(26) тебе в (16) уже написали, какие функции windows api тебе нужны. их 4 штуки. куда еще проще. ниже этого только драйвер. примеров в инете море.
https://yandex.ru/search/?text=запись%20файла%20в%20windows%20api&clid=2186620&lr=10740
29 Вуглускр1991
 
28.06.15
00:38
Сделал, в VS2005.
Был целый ряд неприятных сюрпризов.
1. Самым неприятным из которых оказалось, разница в интерпретации данных:
согласно формата записи данных в файл все числа были записаны как big endian, а воспринимались уже на уровне выполнения кода как little endian, подключать библиотеку winsock2.lib в проект не хотелось из-за функций типа htonl().
2. Далее по степени убывания:
чтобы сделать небуферизированную запись сквозь кэш, надо не только создавать HANDLE файла с флагами FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, но и выравнивать буфер по размеру сектора, а в комментариях написано, что для разных устройств бывает необходимо ставить этот размер эмпирически (пишут, что для SSD это не 0x200, а 0x10000), после прикидок я выровнял по 0x1000.
LPBYTE myBuffer = (LPBYTE)_aligned_malloc(SizeNeeded, 4096);
а потом ещё
void * BufferAligned = ROUND_UP_PTR(myBuffer, dwBytesPerSect);
где dwBytesPerSect честно получил из GetDiskFreeSpace, а для него имя диска или сетевой шары вырезал из GetFullPathName. Вот только GetDiskFreeSpace рабтает для XP и 2003Б и х/з годен ли он для 8.1, а в 8.1 рекомендуют использовать структуру, которой нет в XP и 2003. Надо бы это по-честному обработать, но уже времени нет ...
3. Чтобы локаль писала по русски (а не знаками вопросов)пришлось добавлять #include <locale.h> и в тексте setlocale(LC_ALL,"Rus");
Вообще зависимостей вышло
#include "stdafx.h"
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <strsafe.h>
#include <locale.h>
4. Совершенно смешной сюр: если из HANDLEа созданного с GENERIC_WRITE | GENERIC_READ сделать FileRead в BufferAligned, то позиция курсора в файле сдвигается и запись затем идет в следующий блок, если не переставить курсор в начало :)
5. Теперь приятное:
переменные типа GUID * можно сравнивать на == и можно присваивать одно другому, хотя отладчик VS пишет что-то про type mistmatch, когда я загадываю ему загадку (uuid1 == uuid2)
нао бы проверить, вдруг сравниваются только первый числа в GUID-ах, хотя присваиваются все 16 байт (проверил память).
ИТОГ: в 1С мне работать приятнее и проще. Эти С сносят крышак причем так, что нет удовлетворения или хотябы приступа ФГМ.
30 H A D G E H O G s
 
28.06.15
01:30
(29) Что ты куришь?
31 Кирпич
 
28.06.15
01:33
(29) о чем это ты и нафига оно нам надо?
32 Вуглускр1991
 
28.06.15
02:29
(30), (31)
это я о том, что 4 -мя функциями надо уметь пользоваться, куча камней подводных и поэтому .. нужен был профи.
А вы, ребята: "все просто ..."
33 DDwe
 
28.06.15
07:05
(29) Ты точно бредишь, студент.
34 Garykom
 
гуру
28.06.15
07:28
(29)(32) не советую соваться с такими знаниями на форум где чисто с++ или прочие с# и т.д. тусуются

просто поймут что лох и раскрутят на $
35 Garykom
 
гуру
28.06.15
07:31
(34)+ и самое главное ты объясни зачем тебе в "расшифровщике" библиотека "winsock2.lib" ?

ЗЫ
попал на бабки вымогателям, решил сам так деньгу зашибать?
36 Кирпич
 
28.06.15
09:41
(35)он winsock байты местами переставлял и засчитал это в подводные камни. И нафигато решил, что нужно писать обязательно без буферизации. Короче была задача найти подводные камни и он их себе нашел. Он видит суслика.
37 Garykom
 
гуру
28.06.15
09:57
(36) интересно с каких "колес" такой "приход" бывает... аж до сусликов
38 spock
 
28.06.15
10:18
(29) сказал бы заказчикам, что не твоя специализация. Зачем эти околомесячные мучения?
39 Вуглускр1991
 
28.06.15
10:47
Вы господа, пока ничего путного не написали,
такое и от интернет школоло услышать можно,
что собственно и показывает уровень.
(36) от winsock я отказался, и ровно об этом написал.
А почему запись без буферизации - моё требование из сути задачи, поймешь почему - поймешь постановку, тогда и решение станет очевидным.
(38) За хорошие деньги. Теперь мне не нужен с++ программист, тем более разводила.
40 Вуглускр1991
 
28.06.15
10:49
От с++, кстати, в программе кроме ++ ничего нет, ни нотации, ни ООП ... походу чистый С получился - как сам того и хотел.
41 Кирпич
 
28.06.15
10:57
(39) чота ты как то перевозбудился от своего величия. Записал в файл свои 15 байт и молодец. Зачем так раздувать щеки? :)
42 Вуглускр1991
 
28.06.15
11:05
(41) И то правда :)
я ж начал то с (29) опыт свой записал, гугл проиндексирует слова все правильные сказал, сам вспомню, да помогу кому вдруг ....
завели с утра
43 Кирпич
 
28.06.15
11:14
(42) ага. лет через 5 прочитаешь эту ветку и поймешь какой ты был наивный и глупый.
44 Вуглускр1991
 
28.06.15
11:21
(43) Дожить ещё надо ... а вообще от поругания себя "молодого и глупого" я уже отказался. Есть вещи доступные только тем, кто чего-то не знает. Программа, кстати, на уровне сделана, не надо трололо.
45 H A D G E H O G s
 
28.06.15
11:23
Что делает программа?
46 Вуглускр1991
 
28.06.15
11:26
(45) вносит изменения в файл виртуального диска.
47 Кирпич
 
28.06.15
11:37
(46) если ты делаешь что то противозаконное, то предупреди, что бы законопослушные граждане вовремя покинули ветку
48 Кирпич
 
28.06.15
11:41
(46) что программа вносит изменения в файл мы уже догадались. Нафига она это делает, и зачем, и почему всё так сложно да ещё и через подводные камни?
49 vde69
 
28.06.15
11:57
вот DLL с открытым кодом, лично работал с помощью нее с файлами > 10г и на 64х и на 32х серверах

немного доработай под себя и будет тебе счастье
50 vde69
 
28.06.15
11:59
(49) правда у нее есть некоторые проблемы с регистрацией как компонента (с повторной регистрацией новой версии именно из 1с, ручная установка всегда проходит на ура)
51 Вуглускр1991
 
28.06.15
12:01
(47) вспоминай японскую мантру-поговорку "ни-сы".
(48) Если за год лимон не сделаю, все расскажу почтенной публике, а если сделаю - расскажу и продам.
Однако, наведу:  почему на Линуксе нет вирусов? (вопрос риторический ответ будет ниже) - ну да, я знаю, что есть, но крайне мало, линукс сам - один большой вирус (мягкая ирония в адрес любимого софта) ... так вот я же о чем -по данным мелкомягких винда в той или иной форме установлена на 89% компьютеров, моб. устройств и прочая оргтехника. Таким образом вирусописатели не зря выбирают винду в качестве объекта атаки. Был бы распространен Линь - и от вирусов под Линь все также бы вешались...
А вот придумал я (быть может) что-то против вирусов и даже шифровальщиков. И пока это просто поделка для моих клиентов - никто не сломает. Но расскажи я о ней ...
52 Вуглускр1991
 
28.06.15
12:04
(50) Спасибо ... только запуск 1С это событие, которое происходит в более поздние периоды работы компьютера (скажем так в "золотом веке" после загрузки ОС), а моя поделка - каменный топор.
53 Кирпич
 
28.06.15
12:05
(48) vde69, ты случайно не топменеджер госкорпорации? Просто постоянно замечаю в твоих советах три важнейших качества руководителя: твердость, решительность и полное непонимание ситуации. :)
54 Кирпич
 
28.06.15
12:08
(51) ты значит гений. Понятно. Подождем годик.
55 Вуглускр1991
 
28.06.15
12:09
(54) тему апайте
56 vde69
 
28.06.15
12:13
(52) ну сделать из этой DLL exe-шник это 10 минут работы, самый главный вопрос - это вопрос прав, ты вручную запускал под правми админа, а скрипт небось хочешь повесить в логон юзера :)
57 Garykom
 
гуру
28.06.15
12:14
(51) мне как бы уже заранее нравится ваш лисапед...

проблема в том что почти все новое это хорошо забытое старое

ЗЫ говорить что от вирусов под линукс так же бы все вешались это несколько опрометчиво

примерно как говорит тоже самое и про маки, какая какая там у OSX распространенность не напомните? а кол-во вирусов?
58 Вуглускр1991
 
28.06.15
12:15
(56) Вот это сейчас самое не решенное: до логона всяких юзеров, во время логона диск уже должен существовать. Вроде эту задачу решает планировщик. Сегодня в этом уверюсь.
59 vde69
 
28.06.15
12:17
(53) как я понимаю - автор хочет корректировать "системный" файл. Я ничего не упустил?
60 Garykom
 
гуру
28.06.15
12:19
(59) автор хочет изобрести песочницу или бэкапницу или еще какую то лисапеду со своими квадратными колесами
61 Кирпич
 
28.06.15
12:19
(59) он не говорит чего хочет корректировать. Файл виртуального диска какого то.
62 vde69
 
28.06.15
12:19
(58) а ты глянь в политике, вроде там есть возможность подключения скрипта до логона без всяких планировщиков
63 Garykom
 
гуру
28.06.15
12:29
вообще самое лучшее что я видел средство от вирусов
это было реализовано в некоторых школах/вузах еще на вин98 (где было от вирусни не продохнуть)

при каждом включении компа... он восстанавливается из "чистого образа" т.е. система и установленные проги просто копируются из скрытого раздела диска или даже по сетке с сервера

а все "документы" при выключении грохаются в архив по дате изменения и также при включении/загрузке восстанавливаются самые последние

если ставится допом какая то прога то при выключении можно было выбрать сносить ее нафик или тоже засунуть в отдельный архив

некий принцип использования резидентных антивирусных мониторов, но без лишних вопросов юзверю

например прога при установке лезет в кучу мест и меняет кучу файлов, но всегда есть система до этой проги и отдельно пишутся все измененное прогой

в любой момент можно любую прогу выкинуть нафик, при этом другие восстановятся чистенькие
64 Garykom
 
гуру
28.06.15
12:30
(63) но это прокатывало когда винда занимала 300 метров...
65 Вуглускр1991
 
28.06.15
12:34
(62) А вот потерял я ссылку про политики. Можно в хомобейсик винде любые политики экспортировать в текстовый файл, а потом засунуть обратно с изменениями, и я даже делал это.... но вот искал недавно и не нашел :(( можно прикрутить gpedit но это с нарушениями соглашений, и secpol по прежнему не работает
66 Вуглускр1991
 
28.06.15
12:35
(63) Да идея она самая, хорошо забытое старое :)
67 Jump
 
28.06.15
12:37
(2)Размер файла вообще никак не влияет на выбор языка.
Разницы вообще нет с каким файлом работать 1килобайт или 1террабайт.
68 Jump
 
28.06.15
12:39
(46)А зачем вносить изменения в файл виртуального диска?
Какой формат диска?
69 Кирпич
 
28.06.15
12:43
(68) это и так все знают, но у vde69 для больших файлов есть целая dll . Для больших файлов сотит дороже видимо.
70 Вуглускр1991
 
28.06.15
12:44
(67) Как считаешь "Borland Pascal 7.0" на такую задачу годится?
(68) VHD
71 Jump
 
28.06.15
12:45
(69)А при чем тут vde69?
72 Jump
 
28.06.15
12:47
(70)Любой. В том числе и паскаль.

А зачем перезаписывать VHD с помощью каких-то программ?
Не проще ли примонтировать и поменять информацию?
73 Кирпич
 
28.06.15
12:47
(70) конечно годится. От языка нужно только чтобы можно было dll подключить.
74 Вуглускр1991
 
28.06.15
12:58
(72) (73) Господа, поскольку к ваштм постам не прикреплено метки "сарказм" мне придется объяснить: что среда разработки BP7.0 компилирует программу в вызовы функции MS DOS версий 5 и 6, который оперируют 16-ти битными регистрами и не могут представить себе файла большего, чем 2^32 байт, что соответствует 4 Гигам - это тот максимум который в то время казался непреодолимым и надолго достаточным. Отголоски этой проблемы до сих пор звучат в вопросах передачи процесса загрузки из загрузочной записи БИОС в раздел, который отстоит от начала диска более чем на 8 Гигов (можно почитать в нете по ключам mbr, initramfs ...)
75 Jump
 
28.06.15
13:02
(74)Ну видимо какой-то древний язык.
Любой современный язык работает с любым размером файла, пайтон, визуал бэйсик, пэхапе и прочие джавы.
76 Вуглускр1991
 
28.06.15
13:05
(75) То, что мне рекомендовали в этой теме - компиляция проекта на VS в прямые вызовы kernel32.dll  меня полностью устроило. Думаю, что сходных результатов можно было добиться в С# проекте, однако в vb, php и прочих джавах между программой и записью в файл стояло бы слишком много посредников - что сказалось бы разными видимыми и невидимыми ограничениями на качество и даже на возможность записи. Их кстати и без того повылазило :)
77 Кирпич
 
28.06.15
13:07
(74) а как же на нем писали для windows, интнресно, и нафиг ты его вообще вспомнил:)
78 Jump
 
28.06.15
13:12
(76)Какие нафиг посредники на vb, пхп, и джаве?
79 ДенисЧ
 
28.06.15
13:12
(77) на 7м под винду не писали )
80 Вуглускр1991
 
28.06.15
13:13
(77) А я помню, как описывал окно не визуальным редактором а прямо из текста программы :) спс за приятное напоминание
(65+) а сегодня мне повезло и про политики я все нашел
secedit command-line tool
и
https://www.microsoft.com/en-us/download/details.aspx?id=25250
81 Вуглускр1991
 
28.06.15
13:14
(79) Писали, у меня в графическом окне теннисные мячики от стен отражались
82 Кирпич
 
28.06.15
13:15
(79) а на каком писали? Я помню чота там было про  win32
83 Кирпич
 
28.06.15
13:17
(81) ну если писали для win32 то пойдет
84 ДенисЧ
 
28.06.15
13:18
(81) НЕа.. Под вин16 - было.
85 Вуглускр1991
 
28.06.15
13:20
(84) да, для вин 16 - вот уже и не помню :) думал, что раз в 98 винде запускалась - то w32
86 Вуглускр1991
 
28.06.15
13:22
(83) не факт, что подошло бы - внешние расширения к компилятору могли не содержать блоков работы с файлами 32 бит
87 ДенисЧ
 
28.06.15
13:24
(85) Как плохо думать-то, оказывается... )))
88 DDwe
 
28.06.15
13:26
ТС по развговору  лет 20-25, гонору много, а ума нет.
89 Вуглускр1991
 
28.06.15
13:30
(88) Мы тут программы обсуждаем, знаете ли, компьютеры
90 Кирпич
 
28.06.15
13:31
(86)какие нафиг блоки, если ты напрямую с winapi. Ты опять выдумываешь себе .камни
91 DDwe
 
28.06.15
13:31
(89) И? Это ума добавляет?
92 Вуглускр1991
 
28.06.15
13:33
Вам? - нет.
93 DDwe
 
28.06.15
13:34
(92) Вот так и знал, что такой бедет ответ. Точно 25.
94 DDwe
 
28.06.15
13:36
Это нужно умудриться, что бы с такого простого вопроса как запись файла, такую тему и столько проблем раздуть.
95 Кирпич
 
28.06.15
13:37
(94)зато весело
96 Вуглускр1991
 
28.06.15
13:38
(94) Это бывает :) видели бы Вы тему "как кастрировать кота в домашних условиях"
97 Кирпич
 
28.06.15
13:39
(96)про кота тоже твоя тема?
98 DDwe
 
28.06.15
13:40
(96) Ну вот ты и кастрируешь всем мозг. А то что про линукс с вирусами написал, так вообще бред за гранью.

(95) +100
99 Вуглускр1991
 
28.06.15
13:41
(97) нет увы :)
100 vde69
 
28.06.15
13:42
(94) что-бы таких тем не было, нужно в языке использовать функции ОС а не языка, и больше проблем нет...
101 spock
 
28.06.15
18:16
(88) не нужно вестись на год в ниве :-)
Тут как раз человек с большим жизненным опытом, А не юнец.
102 Zamestas
 
28.06.15
19:05
(0) Может спроецировать в память и через AWE ковырять?
103 Кирпич
 
28.06.15
19:15
Ну опять началось
104 Вуглускр1991
 
29.06.15
11:48
(102) Слава богу заголовок и копия футера лежат прямо в начале файла, все получилось без AWE.
А вот синхронизация процесса входа пользователя с подключение диска - вот это была неожиданно трудная задача для W7homebasic