Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Unable to Write


Страницы:   1 2 3

basilcat ©   (2011-08-30 15:48:00) 

Мастера. Очень редко. Иногда раз в пять дней. Иногда сразу в первый день, а потом затишье неделю, но получаю ошибку Unable to write ... В принципе ошибка локализована. Я по мере отработки программы пишу в ини файл номера точек, которые появляются в PointNumbCurrent:TEdit.   Время между записями разное, от 0,006 сек и выше:
[NachPoint]
NNKV=1605,1,999999  - 1605 меняется 1 - 999999. За диапазон не выходит :)

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

function FileStatus(const FileName: string): boolean;
var
 F: TFileStream;
begin
 try
   F := TFileStream.Create(FileName, fmOpenReadWrite or fmShareExclusive);
   try
     Result := true;
   finally
     F.Free;
   end;
 except
   Result := false;
 end;
end;
 
Пишу стандартно:

N_NachKadr_Val:TValue;

procedure TValue.Writer;
var
IniFile:TIniFile;
begin
   IniFile:=TIniFile.Create(IniFileName);
try
 IniFile.WriteString(IniSection,IniName,inttostr(Value)+','+inttostr(min)+','+inttostr(max));
finally
   IniFile.Free;
 end;
end;

procedure  Form_Aplication.PointNumbCurrentChange(Sender:TObject);
begin
...
{$I-}
     if FileStatus(SKADR_Str) then
             N_NachKadr_Val.Writer
{$I+}
...
end;

SKADR_Str:=ExtractFilePath(ParamStr(0))+'_point2.txt'; - имя с путём создаётся один раз во время инициализации при запуске приложения.

Пишется стандартно из модуля IniFile

procedure TIniFile.WriteString(const Section, Ident, Value: string);
begin
 if not WritePrivateProfileString(PChar(Section), PChar(Ident),
                                  PChar(Value), PChar(FFileName)) then
   raise EIniFileException.CreateResFmt(@SIniFileWriteError, [FileName]);
end;

Что может быть причиной ошибки Unable to Write?


basilcat   (2011-09-02 12:12:00) [1]

Удалено модератором
Примечание: Умный, да?


basilcat   (2011-09-02 12:10:00) [2]


> Для этого есть бесперебойные источники питания.
> При отрубании питания скорее у вас файл будет испорчен,
> чем сохранено последнее значение (вспомним про кэширование
> записи на диск).
>

Система работала на Win2000.
Ещё ни разу не запортился файл. :) Полёт 10 лет был нормальный. Перешёл c Win2000 на WinXP EMBEDDED встроенные системы. Началась описанная выше проблема.

Мужики. Вы что вообще неадекватны. Какой бесперебойник на машине плазменной резки. А если Вы что нибудь пускали в промышленности вопрос был, то покажите. Пишете интернет приложения. Ну пишите, а не умничайте.


Anatoly Podgoretsky   (2011-09-02 12:07:00) [3]

> Ega23  (02.09.2011 11:30:42)  [42]

Лучший бесперебойник это ноутбук


Ega23   (2011-09-02 11:30:00) [4]


>  Если рубанёт питание, то легко выйти в нужную точку и продолжить.


Если рубанёт питание, то будет переход на бесперебойник.
Поэтому всего-навсего надо отслеживать состояние питания в системе (это не так сложно, как кажется), если питание от ИБП и его заряд менее xx% - сохранять состояние куда-то-там и корректно завершать работу.
А за твой решение надо не просто казнить, надо после казни мозг вынуть, сжечь в крематории, а прах отправить за пределы Солнечной Системы.
Во избежание, ибо такая дрянь - заразная.


QAZ   (2011-09-02 11:13:00) [5]


> basil-cat.narod.ru , basilcat.at.ua

при таком интерфейсе пользователя ... просто слов нет

зы
на фотке не нло, а блик в объективе


Ega23   (2011-09-02 11:00:00) [6]


> Это моя система управления. Покажи свои работы в промышленности.

Вот поэтому у нас такой бардак. И в промышленности тоже. Понаберут по объявлениям, а потом удивляемся: "А чой-то ВАЗ - ведро с гайками, почему не могут как Мерседес".
Вот потому и не могут.


Anatoly Podgoretsky   (2011-09-02 09:32:00) [7]

Без всего это ни о каком сохранение и речи быть не может, только о порче системе, но она видимо ничего не стоит.


Inovet   (2011-09-02 09:25:00) [8]

> [37] Anatoly Podgoretsky ©   (02.09.11 08:49)
> с батарейкой на 72 часа

Достаточно получить сигнал о потере питания от оборудования, записать ОДИН раз последний номер опереции, и можно отключиться. Так что обычный бесперебойник потянет, разве что целый цех с конвейерами и сотенями станков на этом компе висит, но сто-то мне подсказывает, что это не так.


Anatoly Podgoretsky   (2011-09-02 08:49:00) [9]

> Омлет  (02.09.2011 07:51:36)  [36]

Для этого есть раиды с батарейкой на 72 часа.
Подход не верный, или все гори синим пламенем, или бабки гони.


Омлет   (2011-09-02 07:51:00) [10]

> Если рубанёт питание, то легко выйти в нужную точку и продолжить.

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


Дмитрий Белькевич   (2011-09-01 18:46:00) [11]


> Казнить.


Нужно же чем-то процессор занимать :)


basilcat   (2011-09-01 18:15:00) [12]


> Во только:
> basilcat   (31.08.11 13:47) [17]
> очень сильно смущает. Использовать ини-файла для такой цели
> мог только "полный неуч"!

Это моя система управления. Покажи свои работы в промышленности.
basil-cat.narod.ru , basilcat.at.ua


basilcat   (2011-09-01 18:12:00) [13]

Кстати 32 часа полёт нормальный именно с FileStatus. Прогон идёт на 3-х компах. Пока всё ОК.


basilcat   (2011-09-01 18:09:00) [14]


> Так необходимо каждую секунду перезаписывать файл? Бред
> какой-то.

Не бред, а необходимость. Если рубанёт питание, то легко выйти в нужную точку и продолжить. На глазок не подходит.


Anatoly Podgoretsky   (2011-09-01 15:03:00) [15]

> Inovet  (01.09.2011 14:27:30)  [30]

С ИНИ не получится, из-за принципов работы. Будет часто "Unable to Write"


Inovet   (2011-09-01 14:27:00) [16]

> [0] basilcat   (30.08.11 15:48)
> Время между записями разное, от 0,006 сек и выше

До 100+ раз в секунду.


Anatoly Podgoretsky   (2011-09-01 13:54:00) [17]

> Омлет  (01.09.2011 13:42:28)  [28]

Нифига себе у тебя округлялка, тебе так зря плату так округлить?


Омлет   (2011-09-01 13:42:00) [18]

> Anatoly Podgoretsky ©   (01.09.11 13:34) [27]
> так что значительно чаще.


Я округлил )


Anatoly Podgoretsky   (2011-09-01 13:34:00) [19]

> Омлет  (01.09.2011 10:41:25)  [25]

В сутках вообще то всего 86400 секунд, так что значительно чаще.


Ega23   (2011-09-01 11:26:00) [20]

Звиздец.
2.5 раза в секунду:
1. Создаётся и тут же убивается FileStream c ShareExclusive.
2. Создаётся TIniFile
3. В нём делается апдейт одного единственного строкового значения.
4. TIniFile убивается.

Казнить.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо