Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.06.24;
Скачать: [xml.tar.bz2];

Вниз

Как ускорить работу с винчестером?   Найти похожие ветки 

 
Tahion   (2002-06-06 19:50) [0]

Моя прогамма при создании главной формы на основе определенных данных создает/измен. существующие значения в/ INI-файл(-е) (1). После этого созданный файл остается открытым, и его содержимое копируется в др. INI-файл (2), который также остается открытым на протяжении всей работы программы (Free не вызываю).
СРАЗУ за этим начинается интенсивное считываниес обоих файлов, причем в 2 еще и ,время от времени, запись. Естественно, что при этом я уже не проверяю наличия файлов на винчестере (я их только-что создал).

И вот вопросы:
1. почему файл 1 создается не свегда, если его нет до этого на винчестере?
2. почему, если файл 1 уже там есть, не все данные в нем переписываются?
3. почему иногда создается файл 1, но не создается файл 2?

Я вижу причину в разной скорости работы винчестера и процессора (ошибка в коде вряд ли - никаких уловий на создания я не накладавал).

Соответственно еще вопросы:
4. Как дождаться создания файла 1 до копирования его содержимого в файл 2, и дождаться создания файла 2 до начала считывания из них (1,2)?
5. Почему бывает так, что файл не создается вообще? Ведь если причина в разности скоростей, то файл ДОЛЖЕН создаваться, хоть и с опозданием!

Ну и последнее: ЧТО ТУТ МОЖНО ЗДЕЛАТЬ?

Выскажте, please, хоть какие-нибудь соображения по этому поводу.
Заранее спасибо за ответы!


 
Shaman_Naydak   (2002-06-06 20:17) [1]

Нет, парень, причина в ДНК, я так думаю.
Разная скорость винта и проца точно тут не при чем


 
Tahion   (2002-06-06 20:21) [2]

В коде что-ли?


 
QymL   (2002-06-06 20:24) [3]

Попробуй вызывать функцию Flush (я нее помню как точно, посмотри в докуметации) для записи буферов файла на диск.


 
Tahion   (2002-06-06 20:33) [4]

Вот часть кода:

procedure TMainForm.FormCreate(Sender: TObject);
var
s: string;
FileName: string;

begin//
...
CurIni:=TIniFile.Create(PrDir+"Имя1.ini");
FileName:=.........//опредпараметр в реестре через TRegINIFile.ReadString(...);
CurIni.WriteString("FileNames", "Имя", FileName);
CopyFile(PChar(PrDir+"Имя1.ini"), PChar(PrDir+"Имя2.ini"));
Ini:=TIniFile.Create(PrDir+"Имя2.ini");
...
//А здесь ф-ция, которая производит чтени уже с Ini
...
end
;

Все, что не задано в ВАР-е, но есть здесь, явл. глобальными переменными!!!


 
Shaman_Naydak   (2002-06-06 20:49) [5]

Перед копированием файла
поставь
CurIni.UpdateFile;
Если не поможет придется таки закрывать 1-ый Ini-шник перед копированием.
А зачем так заморачиваться-то?




 
Tahion   (2002-06-08 14:21) [6]

Попробуем....
--А зачем так заморачиваться-то?
Если не так, то тогда, все параметры руками переписывать надо, а файлов обязательно два быть должно.

Спасибо!


 
Tahion   (2002-06-09 16:48) [7]

УТОЧНЕНИЕ:
Прверял как создает файлы мой вариант и получил интересную закономерность - файлы создаются РОВНО ЧЕРЕЗ РАЗ, и, соответственно, если уже 1,2 существуют, то изменения в них тоже заносит РОВНО ЧЕРЕЗ РАЗ. (Проверял так: откомпилировал программу, удалил оба инишника, открыл, закрыл. Если создала ини, то удалил их. Опять отрыл, и т.д.)

CurIni.UpdateFile; не помогло.
Пробовал освобождать CurIni перед закрытием - еще хуже:
1 создает РОВНО ЧЕРЕЗ РАЗ, а второй создает тогда, когда и первый, но пишет туда разную "бяку". Вот несколько вариантов:
Первый:
-Х~еУЪ+юt9hЬ_J ЪuТh¶¦J _+XЪЪЪ- Ху¦УЪ__XЪЪЪ¦¦X+H Х?.ЖЪХз+УЪИ: h ¦J h,¦J _E-P
Второй:
tyle ф‹A fsBoldfsItalicfsUnderlinefsStrikeOutЌ@ @ЊA TFontStylesф‹A
Третий:
t;
\par st2:=copy(term,\plain\f0\fs16\cf4 1\plain\f0\fs16 ,pos-\plain\f0\fs16\c
и т.д. - полный бред!!!

>>QymL (06.06.02 20:24)
>>Попробуй вызывать функцию Flush (я нее помню как точно, посмотри в >>докуметации) для записи буферов файла на диск.
Flush - не разобрался, а в справке не нашел (Д4). Есть там один Flush, но он связан с I/O errors и не имеет никакого отношения к ИНИ- файлам (или я чего-то не понял).

P.S. Вместо CopyFile сделал свою процедуру, которая открывает 1 инишник, поочередно счатуеут нужные мне данные, и сразу записывает их в 2 ини. Работает всегда ТОЛЬКО ЕСЛИ СТАВЛЮ ЕЕ В ФОРМ.ЭКТИВЭЙТ, но медленее. Что не так с CopyFile? Почему только Форм.эктивэйт?





 
BOOT CrAsH   (2002-06-09 16:57) [8]

Ух уж не люблю я эти компоненты типа TIniFile. Мой тебе совет: реализуй все это руками на низком уровне, используй обычные BlockRead и BlockWrite, можно еще FileRead и FileWrite.
Поверь, будет пахать как трактор :)))) Но придется повозиться с кодом.


 
Tahion   (2002-06-12 15:26) [9]

Ох впадло так долго мучаться...


 
allrussia   (2002-06-13 03:45) [10]

(fileexists )напиши цикл пока первый файл не создастся физически на диске не будет создаваться второй, и т.д., не начнется запись в файл и т.п., не запустится главное окно

вообще у меня похожая байда лечилась

WritePrivateProfileString(nil,nil,nil,имя ini-файла) для 9x

WritePrivateProfileStringW(nil,nil,nil,имя ini-файла) для NT



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.06.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
1-77349
SeB
2002-06-12 17:31
2002.06.24
Выделение в TStringGrid


14-77592
angelcom
2002-05-21 23:41
2002.06.24
Срочно нудна библиотека ....


7-77648
Monak
2002-03-28 08:41
2002.06.24
Клава и мышь!


4-77699
Alku
2002-04-23 12:21
2002.06.24
Подскажите как скопировать содержимое одной директории в другую ?


14-77602
ДедушкаКо
2002-05-17 13:45
2002.06.24
Ну я в районе Полевой-Индустриальной А ГДЕ ВЫ ну например хавк





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский