Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 17:49 13.07.25 
Компютри и Интернет
   >> Програмисти
*Кратък преглед

Страници по тази тема: 1 | 2 | 3 | 4 | (покажи всички)
Тема Въпрос за писане на файл.нови  
Автор geri® (циник)
Публикувано02.04.09 22:45



Пичове, срещнах проблем който не ми е ясно как да реша, и питам тук.

Имаме проста ситуация. Трябва да се създаде един 500 мегабайтов файл (а в перспектива ще се качи до 4 гиги), без да се пишат данни вътре, максимално бързо. Обаче в момента когато го затварям системата заспива и диска светва червено толкова време, колкото и трябва за да запише същото количество данни (което ми е целта да избягна). Което за към 4 гиги файл на флешка е към четвърт час.

Примерът е пределно прост:

FILE* f = fopen (fname, "wb");
fseek (f, 500000000, 0);
fwrite (&f, 1, 1, f);
fclose (f);

и с Виндовски щуротии:

HANDLE h = CreateFile ("myfile",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0, NULL);
SetFilePointer(h,500000000,NULL,FILE_BEGIN);
SetEndOfFile (h);
CloseHandle (h);

Действието се развива под Windows XP SP3. Няма значение дали диска е под NTFS или FAT.

Подозрението е че OS-а се грижи да си запълни нещата с нули до края на файла, демек това е някаква фича на операционната система. Имате ли някакви идеи как това може да се изключи поне временно за да се реши проблемът



Тема Re: Въпрос за писане на файл.нови [re: geri®]  
Автор zaphod (мракобес)
Публикувано02.04.09 23:30



може би флашката така иска, иначе върху диск изглежда моментално сякаш се създава файла.




NE SUTOR ULTRA CREPIDAM


Тема Re: Въпрос за писане на файл.нови [re: zaphod]  
Автор geri® (циник)
Публикувано03.04.09 00:13



И върху диск е абсолютно същото. И аз първоначално се усъмних във флашката, ама не е.



Тема Re: Въпрос за писане на файл.нови [re: geri®]  
Автор Пaньo Дoнeв (пират)
Публикувано03.04.09 09:41



Не мисля, че има начин с win32 api-то да стане. Windows трябва да се грижи данни от друг изтрит фаил да не попаднат в тялото на нов фаил, защото ще бъде сериозен секюрити проблем. Не мога да намеря сега точно къде в msdn-а го пише, но съм доста сигурен, че няма да стане така.

Но с директно манипулиране на файловата структура на ниско ниво е възможно да се направи голям фаил. Само, че трябва нещо на ниво диваиз драйвер и освен това по един начин ще стане при ntfs а по друг начин на флашката където е fat32.



Тема Re: Въпрос за писане на файл.нови [re: Пaньo Дoнeв]  
Автор zaphod (мракобес)
Публикувано03.04.09 09:49



верно това с изтрития файл е сериозен довод.
иначе не е необходимо на ниво драйвер да падаш за да ровиш на ниско ниво, отваря се файл с име \\.\X: и получаваш директен достъп до диска. не съм пробвал за флашка дали бачка, ще е интересно.




NE SUTOR ULTRA CREPIDAM


Тема Re: Въпрос за писане на файл.нови [re: geri®]  
Автор ГHУCEH®ГHOM (смрадлив)
Публикувано03.04.09 09:57



Странно, и двата снипета си бачкат просто пирфектну (vc/ntfs@xp и gcc@ubuntu), под милисекунда.



Тема Re: Въпрос за писане на файл.нови [re: geri®]  
Автор .mono. ()
Публикувано03.04.09 10:01



Тук виждам някакви идеи за подобен проблем:



Изглежда, че има доста голямо значение дали диска е на NTFS или FAT, като естествено на FAT нещата са доста по-зле...



Тема Re: Въпрос за писане на файл.нови [re: ГHУCEH®ГHOM]  
Автор geri® (циник)
Публикувано03.04.09 10:05



Явно тая работа зависи от някакви допълнителни настройки в регистрито. И аз съм го правил навремето, пак под Виндовс, и помня че беше бързо, но на друга система.



Тема Re: Въпрос за писане на файл.нови [re: geri®]  
Автор ГHУCEH®ГHOM (смрадлив)
Публикувано03.04.09 10:11



Само като идея, да не пишеш в компресиран фолдер? Там на теория може да нагазиш в кофти ситуации.



Тема Re: Въпрос за писане на файл.нови [re: .mono.]  
Автор geri® (циник)
Публикувано03.04.09 10:17



Благодаря за вниманието. Аз преди да питам тука доста обходих нета, и попаднах на това. При мене обаче обръщението към DeviceIOControl с параметри от групата FSCTL_SET_ZERO_DATA и FSCTL_SET_SPARSE (което беше другата идея под NTFS) просто гърми и връща FALSE. Почвам да се питам дали и няма нещо на системата, под която се опитвам да го пусна... Щото всичко друго в нея си цъка. Ама тогава каква ми е гаранцията че на друга цъкаща система пак няма да се прояви, след като не е ясно какво е?

Примерът дето е даден в линка ти:

fsutil file createnew c:\$delthis.bin 1234567890

при мене пак се изпълнява много бавно, на диск който е под NTFS и уж поддържа sparse files (GetVolumeInformation() връща флаг, в който има такава информация). Има нещо забраняващо, ама не е ясно какво е...




Страници по тази тема: 1 | 2 | 3 | 4 | (покажи всички)
*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2025 Dir.bg Всички права запазени.