![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Unable to Write
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 убивается.
Казнить.