![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Div |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 3.6.2005 Где: Первоуральск Репутация: нет Всего: 1 |
Люди помогите! Возникла такая проблемма: надо загрузить файл в отведенную под него память и редактировать его там же. Чтобы можно было указать смещение и записать в переменную типа int байт, который находиться по этому смещению. Помогите плз. Буду очень благодарен!
|
|||
|
||||
Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: нет Всего: 5 |
А в чем проблема? Можно в подробностях?
Дело в том что у тебе есть кусок памяти, значит на него есть указатель, следовательно ты можеш его использовать... 1-е что я могу так сказать...да ничего не могу, порверь у тебя этот участок не онли рид случайно. -------------------- Never again... |
|||
|
||||
Div |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 3.6.2005 Где: Первоуральск Репутация: нет Всего: 1 |
Проблемма в том, что я новичек! Я не умею выделять память и загружать туда файл. Если можешь скинь код!
|
|||
|
||||
Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: нет Всего: 5 |
Конкретное решение зависит от поставленых задач. Ты поставил общюю проблему, короче уточни, что именно тебе нужно, в духе типа это считываю изменя. так-то и кладу сюда. -------------------- Never again... |
|||
|
||||
Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: нет Всего: 5 |
Конкретное решение зависит от поставленых задач. Ты поставил общюю проблему, короче уточни, что именно тебе нужно, в духе типа это считываю изменя. так-то и кладу сюда. Общее решение может выглядеть так - Создаеш буфер, туда из файла считуеш данные, там изменяеш, потом кладеш куда нуна. 1 Буффер, масив или что там теде нуна думаю создаш са ![]() 2. Считываем: FILE *stream; //Открываем файл stream = fopen(Path + Name, "r" ) //Читаем из него fgets(Str.GetBuffer(fSize),fSize, stream) После чего выполняем все необходимые мат. операции или что там надо. //записываем в файл помоему fputs, почитай в МСДН, щас нет под рукой //Закрываем fclose(stream); Вот пример. Хотя все может быть иначе, и как я писал раньше, все зависит от того что тебе надобно. Что неясно пиши, попробую помочь. -------------------- Never again... |
|||
|
||||
codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 1 Всего: 39 |
Держи, надеюсь то, что тебе нужно.
Писал в духе Си для одаренных. ![]()
Это сообщение отредактировал(а) codelord - 28.6.2005, 01:44 |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
codelord,
вот так можно узнать имя файла ![]() filelength(fileno(in)); |
|||
|
||||
Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Можно еще вот так, раз файл уже открыт, к тому же это портабельно(filelength нет в c99, в sus2. Не нашелся он в /usr/include'ах):
А еще можно GetFileSize в мастдаях. а еще можно через scan, но это как-то.... слишком -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Чтобы совсем портабельно, надо так:
Это точно идёт на WIN, Linux, Solaris, AIX, DIGITAL UNIX, SCO. Потомц что мне приходилось кроссплатформенно писать для них. А насчёт filelength, тоже на большинстве идёт без проблем. Просто я считаю не оптимальным бегать указателем по файлу, когда эта инфа давно вырешена и лежит, осталось только взять.
|
|||
|
||||
Guest |
|
|||
Unregistered |
Спасибушки большое
![]() |
|||
|
||||
Div |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 3.6.2005 Где: Первоуральск Репутация: нет Всего: 1 |
Спасибо за разъяснения! Всё идет отлично! Разобрался как следует. СПАСИБО!
|
|||
|
||||
Div |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 3.6.2005 Где: Первоуральск Репутация: нет Всего: 1 |
Unregistred был я
Это сообщение отредактировал(а) Div - 29.6.2005, 22:20 |
|||
|
||||
Div |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 3.6.2005 Где: Первоуральск Репутация: нет Всего: 1 |
Немного поразбиравшись, я пришел к выводу, что загружать и далее работать с файлом в памяти лучше таким образом:
Кусок кода на асме записывает в переменную i байт содержащийся по адресу MemoryBuffer. Для изъятия других байтов надо лишь прибавить к MemoryBuffer смещение в памяти. Путь выбирается в окне виндовоза. Чтобы указать имя файла в ручную, надо удалить строки со звездочками и программку заключенную между ними! Тогда CreateFile будет выглядеть так:
name - путь до файла (н-р: "с:\\david\\coding\\filename.txt") Главное в конце не забыть удалить участок памяти:
Очень удобно, кстати. Сам сейчас юзаю такой метод! ![]() |
||||||
|
|||||||
Arush |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 10.11.2003 Репутация: 1 Всего: 1 |
Если тебе не нужны все данные файла, то быстрее всего использовать мапирование его в память используя CreateFileMapping.
ЗЫ. Твой код на асме аналогичен i=((PBYTE)MemoryBuffer)[0]. Или i=MemoryBuffer[0] если MemoryBuffer объявить как PBYTE ![]() |
|||
|
||||
Div |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 3.6.2005 Где: Первоуральск Репутация: нет Всего: 1 |
Не спорю. Но так быстрее ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |