![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
hash_2000 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 12.9.2008 Репутация: нет Всего: нет |
Доброго времени суток!
подскажите ктонибудь кто пользовался функцией SetFileValidData .... как ей пользоваться !!!? ![]() при использованиии всегда возвращает ошибку выполнения GetLastError() == ERROR_PRIVILEGE_NOT_HELD в МСДН написано что должны быть установлены привелегии SE_MANAGE_VOLUME_NAME , не знаю где их устанавливать , и чем это грозит ... |
|||
|
||||
Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 8 Всего: 26 |
Как-то так можно установить SE_MANAGE_VOLUME_NAME привелегии Ну а дальше пробуйте -------------------- ????? ??, ??????? ?????. ![]() |
|||
|
||||
hash_2000 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 12.9.2008 Репутация: нет Всего: нет |
ну ладно ... никому я смотрю не интересно ... или никто не знает ...
для того чтобы установить привилегии для процесса нужно сделать следующее:
Добавлено через 1 минуту и 39 секунд ![]() |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
SetFileValidData - это некоторый аналог разреженных файлов,
позволяет заполнить нулями некоторую файловую область, фзиически этого не делая вот самые важные условия:
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
hash_2000 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 12.9.2008 Репутация: нет Всего: нет |
... только вот функция почемуто постоянно возвращает ошибку ...
хотя я нашел способ чтобы эта функция работала , перед ее вызовом нужно написать следующее:
|
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
hash_2000, только SetEndOfFile и ставит физически размер файла, если он не разреженный
SetFilePointer этого делать и не должен -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
hash_2000 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 12.9.2008 Репутация: нет Всего: нет |
SetEndOfFile как получается не устанавливает физический размер файла , а устанавливает , так называемый логический размер файла ... тоесть на самом деле данных внутри файла нет ...
тоесть сначала мы ставим указатель в файле куданибудь с помощью функции SetFilePointer ... затем когда выполняем SetEndOfFile ... то по указателю в файле устанавливается размер ... я так понял работает эта функция ... во первых если выполнить следующий код:
... то функция слишком быстро выполнится , для выделения физического размера файла 64 ГБ а если потом попробовать записать один байт в конец файла то сразу будет заметно что выделяется физическое пространство ... Добавлено через 1 минуту и 22 секунды вот теперь у меня вопрос в другом , зачем нужна функция SetFileValidData , если за нее все выполняет связка SetFilePointer и SetEndOfFile ... |
|||
|
||||
GremlinProg |
|
||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
можешь поставить брейкпойнт после SetEndOfFile и посмотреть на сколько уменьшился объем диска другое дело, сам диск - логическая единица, физически ставится только маркер в таблице файлов, а заполнять файл нулями он не должен
это от физического размера не зависит, тут начинает работать буферизация встроенная или своя - без разницы Добавлено через 1 минуту и 58 секунд
т.е. при чтении данных после области, помеченной SetFileValidData, на самом деле буфера будут заполняться просто нулями, без обращения к диску -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||||||||
|
|||||||||||
hash_2000 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 12.9.2008 Репутация: нет Всего: нет |
ну посмотрел я на сколько уменьшилось место на даске , после
на 64 Гб уменьшилось ... и что это означает ? тоесть если я выполню SetFileValidData место на диске не уменьшится ... ? или я чегото не пойму ... |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
нет, не должно, если ты поставишь его на 64 кб, то просто при последовательном чтении всего этого файла, время чтения займет физическое чтение с диска 64кб + время заполнения оставшегося пространства нулями, а это несоизмеримо меньше, чем если бы ты читал все 64 Гб функция сделана специально "на вырост" файла, чтобы можно было заполнять его по факту наличия текущих данных, а не по факту его конечного размера -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
hash_2000 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 12.9.2008 Репутация: нет Всего: нет |
ну тогда как заставить эту функцию работать ? выше я писал что получается без SetFilePointer и SetEndOfFile
|
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
без SetFilePointer и SetEndOfFile функция будет работать только если ты откроешь заранее созданный файл достаточного размера, чтобы он покрывал размер, передаваемый в SetFileValidData
в остальных случаях SetFilePointer и SetEndOfFile обязательны 1. создай новый файл 2. сдвинь указатель на 64Гб 3. укажи конец файла 4. вызови SetFileValidData с размером в 64 кб вот и все, можешь прочитать, к примеру в цикле этот файл с начала до конца буфером в 64 кб и посмотри насколько быстро это произойдет потом можешь закомментировать SetFileValidData и снова запустить программу (для 64 Гб, пока она работает, ты успеешь и прогуляться, и поужинать и потом, скорее всего, когда тебе надоест ждать, ты просто ее "придушишь" ) Добавлено @ 13:28 кстати, когда будешь это делать, поставь брейкпойнт после вызова SetFileValidData и посмотри из эксплорера свойства файла, скажи есть ли разница между параметрами "Размер" и "На диске" это будет точным ответом на твой вопрос: "место на диске не уменьшится ... ?" Это сообщение отредактировал(а) GremlinProg - 9.10.2009, 13:28 -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
hash_2000 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 12.9.2008 Репутация: нет Всего: нет |
GremlinProg попробовал я сделать так как ты написал , и с SetFileValidData и без нее читает одинаково ...
может я не правильно както написал , GremlinProg выложи код если не трудно ... пример ... |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
без проверок, примерно так:
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
hash_2000 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 12.9.2008 Репутация: нет Всего: нет |
ну я все так и делал ... и место на диске отнялось и читает нифига не в мгновение ...
место отнялось после функции SetEndOfFile ... а после SetFileValidData ... оно если должно было прибавиться , то оно не прибавилось ... и читалось примерно одинаково по времени .... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |