Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка создания файла 
:(
    Опции темы
neic
Дата 17.12.2009, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 839
Регистрация: 28.1.2007

Репутация: нет
Всего: 7



Ругается на то, что файл отсутствует:

Код

Append(f);


Файла реально нет, но(!), на следующей строке указано, что нужно делать:
Код

if IOResult<> 0 then
    Rewrite(f); // если файла нет и нужно его создать или перезаписать.


Полностью:
Код

unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm3 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
var
    f: TextFile; // файл — база данных
      fname:string;
begin
    fname:='c:\pogoda1.txt';
    AssignFile(f, fname);
    Append(f);
    if IOResult<> 0 then
    Rewrite(f); // если файла нет и нужно его создать или перезаписать.
    writeln(f, edit1.text);
    writeln(f, edit2.text);
    closefile(f);

    form1.StringGrid1.Cells[0,0]:='1';
end;

end.


Что ему (делфи) не хватает???
PM MAIL WWW ICQ Skype   Вверх
Akella
Дата 17.12.2009, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



Код

AssignFile(f, fname);
Reset(f);

PM MAIL   Вверх
neic
Дата 17.12.2009, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 839
Регистрация: 28.1.2007

Репутация: нет
Всего: 7



Выдаёт это

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  __________.png 9,27 Kb
PM MAIL WWW ICQ Skype   Вверх
neic
Дата 17.12.2009, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 839
Регистрация: 28.1.2007

Репутация: нет
Всего: 7



Написал так:
Код

    fname:='c:\pogoda1.txt';
    AssignFile(f, fname);
    Reset(f);
    if IOResult<> 0 then
      begin
      Rewrite(f); // если файла нет и нужно его создать или перезаписать.
      end
    else
      begin
      Append(f);
    end;
    writeln(f, edit1.text);
    writeln(f, edit2.text);
    closefile(f);


Это сообщение отредактировал(а) neic - 17.12.2009, 12:23
PM MAIL WWW ICQ Skype   Вверх
Данкинг
Дата 17.12.2009, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Код

AssignFile(f, fname);
if not fileexists(fname) then rewrite(fname) else append (fname);




--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Snowy
Дата 17.12.2009, 12:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



2010 год на носу, а люди всё ещё пользуются AssignFile...
"В то время, когда космические корабли бороздят просторы большого театра..." ©
PM MAIL   Вверх
neic
Дата 17.12.2009, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 839
Регистрация: 28.1.2007

Репутация: нет
Всего: 7



Snowy
А что ты предлагаешь? В 7 делфи.

Добавлено через 2 минуты и 22 секунды
Данкинг
спасибо.

Только подредактировать пришлось:
Код

if not fileexists(fname) then rewrite(f) else append (f);

PM MAIL WWW ICQ Skype   Вверх
Данкинг
Дата 17.12.2009, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Дык, а что такого: AssignFile и мне нравится. smile Наглядно и понятно.

Это сообщение отредактировал(а) Данкинг - 17.12.2009, 12:52


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Snowy
Дата 17.12.2009, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Да какая разница, какая дельфи.
TStream (любой), TStringList...
Зачем пользоваться методами, оставшимися в наследство от DOS?
PM MAIL   Вверх
Данкинг
Дата 17.12.2009, 13:45 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Ну так а если надо считать текстовый файл в миллион строк - сколько времени он будет грузиться в TStringList ?

Это сообщение отредактировал(а) Данкинг - 17.12.2009, 13:45


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Snowy
Дата 17.12.2009, 13:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Судя по коду, там до миллиона лет 200 активного пользования.
А для больших размеров - стримы. И форматы посеръёзнее текстовых.
PM MAIL   Вверх
Akella
Дата 17.12.2009, 17:14 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



Snowy, а если нужно загрузить 100 строк текстового файла. А файл размером 5-10 мегабайт.
PM MAIL   Вверх
Snowy
Дата 17.12.2009, 17:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Ага, особенно, если это последние 5 строк...
Что за попытки выискать мифическую ситуацию?
Мне подобные что-то никогда не попадаются.

Что касается первоначального вопроса - ответ есть в справке по IOResult ( {$I-} )
PM MAIL   Вверх
Akella
Дата 17.12.2009, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



У меня есть такая ситуация. Например, когда пользователю нужно показать кусок файла, чтобы он выбрал, нужно ли выполнять Dos->Win или нет для дальнейшей обработки текста.
PM MAIL   Вверх
Snowy
Дата 18.12.2009, 11:24 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Ну так тем более - в стрим загружаешь 200 символов и показываешь.
Небольшой - это в символах.
В строках может быть совсем не небольшим.

Вобщем флейм уже пошёл...
PM MAIL   Вверх
SlaUr
Дата 18.12.2009, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: 1
Всего: 5



Код

procedure TForm3.Button1Click(Sender: TObject);
var
    f: TextFile; // файл — база данных
      fname:string;
begin
    fname:='c:\pogoda1.txt';
    AssignFile(f, fname);
    Append(f);
    if IOResult<> 0 then
    Rewrite(f); // если файла нет и нужно его создать или перезаписать.
    writeln(f, edit1.text);
    writeln(f, edit2.text);
    closefile(f);

    form1.StringGrid1.Cells[0,0]:='1';
end;

 А кто будет ставить {$I-}  {$I+}
Вот что должно быть
Код

{$I-}  Append(f);{$I+}
    if IOResult<> 0 then
{$I-}    Rewrite(f);{$I+}
    if IOResult<> 0 then showmessage('Error');


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


Это сообщение отредактировал(а) SlaUr - 18.12.2009, 15:25
PM MAIL   Вверх
profesiachuvak
Дата 19.12.2009, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 7.11.2009
Где: Беларусь, Минск

Репутация: 1
Всего: 4



Цитата(SlaUr @  18.12.2009,  15:16 Найти цитируемый пост)
 А кто будет ставить {$I-}  {$I+}


SlaUr что это значит?, Вы хотите сказать что без этого работать не будет?


--------------------
Закон Мерфи :если есть вероятность того, что какая-нибудь неприятность может случиться, то она обязательно произойдет.
PM MAIL   Вверх
SlaUr
Дата 21.12.2009, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: 1
Всего: 5



В этом коде возникает ошибка и ioresult=0

Код

procedure TForm1.Button1Click(Sender: TObject);

begin
AssignFile(F1,'c:\1.tmp');
try
Append(F1);
except
Showmessage(inttostr(ioresult));
end;
end;



В этом коде ошибки не возникает и ioresult=2
Код

procedure TForm1.Button1Click(Sender: TObject);

begin
AssignFile(F1,'c:\1.tmp');
{$I-}Append(F1){$I+};
Showmessage(inttostr(ioresult));
end;


У neic программа вываливалась по ошибке поэтому никакого файла не создавалось

Это сообщение отредактировал(а) SlaUr - 21.12.2009, 09:05
PM MAIL   Вверх
profesiachuvak
Дата 21.12.2009, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 7.11.2009
Где: Беларусь, Минск

Репутация: 1
Всего: 4



SlaUr, Ситуация ясна, вот только эта запись не понятна для меня :

Код

{$I-}Append(F1){$I+};


Как понимать это штуку: {$I-}; ? smile 



--------------------
Закон Мерфи :если есть вероятность того, что какая-нибудь неприятность может случиться, то она обязательно произойдет.
PM MAIL   Вверх
Snowy
Дата 21.12.2009, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



А справку посмотреть?
Директива, которая как раз и вырубает вываливание с ошибкой.
PM MAIL   Вверх
profesiachuvak
Дата 21.12.2009, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 7.11.2009
Где: Беларусь, Минск

Репутация: 1
Всего: 4



Цитата(Snowy @  21.12.2009,  15:05 Найти цитируемый пост)
Директива, которая как раз и вырубает вываливание с ошибкой. 


Да я так и сделал, не успел отписаться.    
{$I-} - отключает генерацию исключений.



--------------------
Закон Мерфи :если есть вероятность того, что какая-нибудь неприятность может случиться, то она обязательно произойдет.
PM MAIL   Вверх
Демо
Дата 21.12.2009, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 7
Всего: 50



Я бы не рекомендовал использовать {$I-} без глубокого понимания этого механизма.
Отключение проверки ошибок может повлечь за собой труднонаходимые ошибки и глюки.
Лучше использовать обработку исключений.


--------------------
    
PM MAIL ICQ Skype   Вверх
Snowy
Дата 21.12.2009, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Без глубокого понимания можно использовать готовый пример.
Например из справки Delphi (TurboPascal)
В ТрупоПаскале по другому и никак было.
А это наследство покойного...
PM MAIL   Вверх
Данкинг
Дата 21.12.2009, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Цитата(profesiachuvak @  21.12.2009,  14:51 Найти цитируемый пост)
Как понимать это штуку: {$I-}; ?

Видимо, ты в Паскале ничего не писал? smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
profesiachuvak
Дата 21.12.2009, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 7.11.2009
Где: Беларусь, Минск

Репутация: 1
Всего: 4



Цитата(Данкинг @  21.12.2009,  16:44 Найти цитируемый пост)

Видимо, ты в Паскале ничего не писал?


В лет 13 в Pascal 5 а потом Turbo что-то писал, но видимо не сталкивался с обработкой исключений. А почему там невозможно было без {$I-} ???
Мне аж интересно стало.


--------------------
Закон Мерфи :если есть вероятность того, что какая-нибудь неприятность может случиться, то она обязательно произойдет.
PM MAIL   Вверх
Данкинг
Дата 21.12.2009, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Цитата(profesiachuvak @  21.12.2009,  16:56 Найти цитируемый пост)
А почему там невозможно было без {$I-} ???

Вообще я смутно помню, что там в ТП было.  smile Но там же обработчика ошибок не было (try...catch), вот и приходилось отключать проверку ошибок.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
bems
Дата 24.12.2009, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Там не было не только обработки исключений, но и самих исключений. А проверка ошибок как раз и делалась через IOResult. И директивы компилятора соответственно там тоже не было.


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Snowy
Дата 24.12.2009, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Цитата(bems @  24.12.2009,  18:11 Найти цитируемый пост)
И директивы компилятора соответственно там тоже не было.

Из справки TP7:
Код
{
 Замечания:
Чтобы контролировать ошибки ввода/вывода с помощью функции IOResult, опция
проверки ввода/вывода должен быть выключена ({$I-}). Если происходит ошибка
ввода/вывода, и проверка ввода/вывода выключена, то все последующие операции
ввода/вывода игнорируются, пока не будет сделано обращение к функции
IOResult, при котором очищается внутренний флаг ошибки.
}

Var F : File Of Byte;

Begin
 { Получаем имя файла из командной строки }
 Assign(F, ParamStr(1));
 {$I-}
 Reset(F);
 {$I+}
 If IOResult=0 Then WriteLn('Размер файла: ', FileSize(F), ' байт.'))
               Else WriteLn('Файл не найден.');
End.

PM MAIL   Вверх
bems
Дата 24.12.2009, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Убедил. Но исключений-то не было smile


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Snowy
Дата 25.12.2009, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Так я про то и говорю - обработчиков исключений не было, поэтому использовались директивы компилятора.  smile 
Теперь обработчики есть, но старьё с собой до сих пор тянем.  smile 
Я к тому и клоню, что это всё устарело ещё в прошлом тысячелетии, а у нас 2010 год на носу уже.  smile 
С наступающим  smile 
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1261 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.