|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
30.03.2011, 19:05 | #1 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
несколько позиций файла(мультиоткрытие)
можно ли как то открыть файл в одной программе два раза сразу?
(получив разные хендлы, с разными позициями соответственно) иль хотелось бы еще проще, по одному хендлу сделать оное, возможно ли такое иль писать свой класс для работы таким образом? цель, дать нескольким потокам возможность работать с одним файлов одновременно(каждому потоку нужна своя позиция в файле) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
30.03.2011, 20:04 | #2 |
Форумчанин
Регистрация: 23.04.2009
Сообщений: 346
|
Хендл можно дублировать, но позиция указателя в файле разумеется для всех дублированных хендлов всем потокам и процессам будет одинаковой; также и для одного и того же хендла позиция не может быть разной никак.
Чтобы разрешить открывать файл повторно посмотрите там в аргументах функции КреатФайл есть отвечающие как раз за это, откройте файл повторно и сделайте как вам надо
Нет, ну правда..
|
30.03.2011, 20:23 | #3 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
> цель, дать нескольким потокам возможность работать с одним файлов одновременно(каждому потоку нужна своя позиция в файле)
элементарно, через OVERLAPPED: Код:
Только файл handle должен быть открыт с флагом OVERLAPPED. Любой поток в любой момент времени может вызвать это процедуру, запросив запись в любое место файла. Я так лог пишу. Если нуно, могу весь код привести, там не так много.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
30.03.2011, 20:43 | #4 |
Заблокирован
Регистрация: 27.05.2010
Сообщений: 1,099
|
А CreateFileMapping + MapViewOfFile не спасут ОРД ?
|
30.03.2011, 20:47 | #5 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
Только хотел про файлмапинг добавить )
Если размер файла особо не не меняется, можно замапить его в память (CreateFileMapping(), MapViewOfFile()), и работать с файлом как с обычной памятью. В конце только не забыть flush() сделать. Там вобще всё просто получается. Для произвольного доступа (чтение/запись) самое оно. Только если файл постоянно растёт, там есть тонкости. Или нет?
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
02.04.2011, 15:27 | #6 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
я думаю что скорее всего я вообще откажусь от этого, и буду грузить файл в память, ибо его изменять придется скорее всего(то есть не посто загрузить, а еще и обработать)
хотя вариант мапинга + традиционный WriteFile(файл состоит из readonly данных, и так сказать оверлея(который уже RW)) можно же так?(просто пока не могу проверить...другим пока занят по горло) а всетаки наверно для повышения производительности уже обработанные файлы буду грузить именно так. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
скачивание одного и того же файла несколько раз. | Miha1986 | Работа с сетью в Delphi | 1 | 16.01.2011 21:36 |
Загрузка файла в несколько потоков | Joe_Tribbiani | Работа с сетью в Delphi | 12 | 11.04.2009 12:06 |
Считать из файла несколько массивов | pascalC | Общие вопросы C/C++ | 13 | 20.10.2008 21:16 |
Разделение txt файла на несколько htm | Tiger16 | Фриланс | 3 | 17.04.2008 22:40 |
по нажатию кнопки shape будет сдвигаться на несколько позиций в сторону (Delphi7) | -HunteR- | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 14 | 12.11.2007 20:37 |