Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 30.11.2011, 20:00   #1
Katus
Форумчанин
 
Регистрация: 30.11.2011
Сообщений: 161
Репутация: 51
По умолчанию ###I/O 32/103/123

Объясните пожалуйста, в чем ошибка? Что не делаю, все время выдает ошибку... то I/O 32, то I/O 103, то I/O 123...((

Код:

    repeat
    {$I-}
    Reset(FileOfData);
//    closefile(FileOfData);
    {$I+}
    if IOResult<>0
      then
        begin
        assignfile(FileOfData, FileNameIs);
        rewrite(FileOfData);
//        closefile(FileOfData);
        writeln(FileOfData, '&#208;&#229;&#231;&#243;&#235;&#252;&#242;&#224;&#242; &#242;&#229;&#241;&#242;&#232;&#240;&#238;&#226;&#224;&#237;&#232;&#255;');
        writeln(FileOfData, '&#210;&#229;&#241;&#242;&#232;&#240;&#238;&#226;&#224;&#237;&#232;&#229; &#239;&#240;&#238;&#248;&#229;&#235;(&#224;) &#241;&#242;&#243;&#228;&#229;&#237;&#242;(&#234;&#224;) &#227;&#240;&#243;&#239;&#239;&#251; &#185;', Form1.Gp.Text);
        writeln(FileOfData, Form1.NameSN.Text:Length(Form1.NameSN.Text), 
              Form1.NameN.Text:(Length(Form1.NameN.Text)+1), Form1.NameTN.Text:(Length(Form1.NameTN.Text)+1));
        writeln(FileOfData);
        closefile(FileOfData);
        IORE:=False;
        end
      else
        begin
        num:=num+1;
        case num of
        0..9: LLL:='00'+IntToStr(n);
        10..99: LLL:='0'+IntToStr(n);
        100..255: LLL:=IntToStr(n);
        else ShowMessage('&#207;&#240;&#229;&#226;&#251;&#248;&#229;&#237;&#238; &#228;&#238;&#239;&#243;&#241;&#242;&#232;&#236;&#238;&#229; &#234;&#238;&#235;&#235;&#232;&#247;&#229;&#241;&#242;&#226;&#238; &#238;&#228;&#237;&#238;&#232;&#236;&#229;&#237;&#237;&#251;&#245; &#244;&#224;&#233;&#235;&#238;&#226;');
        end;
        if num=0 then
          for count:=1 to Length(FileNameIs)-4 do
            F:=F+FileNameIs[count]
          else
          for count:=1 to Length(FileNameIs)-7 do
            F:=F+FileNameIs[count];
        FileNameIs:=F+IntToStr(num)+'.txt';
        assignfile(FileOfData, FileNameIs);
        IORE:=True;
        end;
    until IORE=False;

Ошибку выдает в
Код:

        rewrite(FileOfData);
//        closefile(FileOfData);

цель данной части программы состоит в том, чтобы при совпадении имен файла создавался ему подобный с номером из 3 цифр

Последний раз редактировалось rpy3uH; 30.11.2011 в 21:08.
Katus вне форума   Ответить с цитированием
Старый 30.11.2011, 20:20   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 11,775
Репутация: 1932

icq: 216409213
По умолчанию

Код:

FileOfData

кто такой? что там?
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 30.11.2011, 20:26   #3
Katus
Форумчанин
 
Регистрация: 30.11.2011
Сообщений: 161
Репутация: 51
По умолчанию

Код:

FileOfData: Text;
FileNameIs: string;

Katus вне форума   Ответить с цитированием
Старый 30.11.2011, 21:07   #4
Katus
Форумчанин
 
Регистрация: 30.11.2011
Сообщений: 161
Репутация: 51
По умолчанию

FileOfData ассоциируется с FileNameIs на протяжении всей программы
Katus вне форума   Ответить с цитированием
Старый 30.11.2011, 21:56   #5
GunSmoker
Профессионал
 
Регистрация: 13.08.2009
Адрес: Россия, Тверь
Сообщений: 2,581
Репутация: 1066

icq: 436815515
skype: RandomClear
По умолчанию

Учись делать нормальную обработку ошибок.

I/O error 32 = ERROR_SHARING_VIOLATION - файл уже кем-то открыт (возможно - тобою же)
I/O error 103 = "File not open" - возбуждается CloseFile, Read Write, Seek, Eof, FilePos, FileSize, Flush, BlockRead или BlockWrite, если файл не открыт.
I/O error 123 = ERROR_INVALID_NAME - неверно указано имя файла (возможная причина - не был вызван AssignFile).
__________________
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума   Ответить с цитированием
Старый 30.11.2011, 22:06   #6
GunSmoker
Профессионал
 
Регистрация: 13.08.2009
Адрес: Россия, Тверь
Сообщений: 2,581
Репутация: 1066

icq: 436815515
skype: RandomClear
По умолчанию

Далее, по коду: написан бред.

1. Где AssignFile до начала цикла? У тебя первым действием идёт Reset на неинициализированную переменную. Неудивительно, что его вызов даст что угодно - ведь ты суёшь Reset мусор.

Далее, если вызов (случайно) завершился успешно (т.е. IOResult = 0), то ты:

2. Изменяешь FileNameIs и заново вызываешь AssignFile - на уже открытый файл! (ветка else).

3. Если же вызов Reset завершился ошибкой (что более вероятно, ведь ты суёшь ему ерунду), то ты просто открываешь файл и начинаешь в него писать данные, как если бы всё было нормально O_o
__________________
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.

Последний раз редактировалось GunSmoker; 30.11.2011 в 22:14.
GunSmoker вне форума   Ответить с цитированием
Старый 30.11.2011, 22:22   #7
Katus
Форумчанин
 
Регистрация: 30.11.2011
Сообщений: 161
Репутация: 51
По умолчанию

...вот тогда весь код моей программы... мб так будет понятней...*scratch*
Код:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Queshion: TLabel;
    IfYes: TLabel;
    IfNo: TLabel;
    InProcents: TLabel;
    Variant1: TCheckBox;
    Variant2: TCheckBox;
    Variant3: TCheckBox;
    Variant4: TCheckBox;
    ImEnd: TBitBtn;
    Reger: TButton;
    NameN: TEdit;
    NameSN: TEdit;
    NameTN: TEdit;
    Gp: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    procedure ImEndClick(Sender: TObject);
    procedure RegerClick(Sender: TObject);
    procedure NameNKeyPress(Sender: TObject; var Key: Char);
    procedure GpKeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  TTester = record
    FirstName: String;
    SecondName: String;
    ThirdName: String;
    Group: integer;
    end;

var
  Form1: TForm1;
  n: byte; // &#204;&#224;&#234;&#241; &#234;&#238;&#235;-&#226;&#238; &#226;&#238;&#239;&#240;&#238;&#241;&#238;&#226;
  i: byte; // &#209;&#247;&#229;&#242;&#247;&#232;&#234; &#226;&#238;&#239;&#240;&#238;&#241;&#224;
  vrnt: byte; // &#194;&#224;&#240;&#232;&#224;&#237;&#242;
  Tester: TTester;
  FileNameIs: string;
  FileOfData: text;
  SSName, STName, SName: string;
  Quest: array [1..100,0..100,0..4] of string;

implementation

{$R *.dfm}

function ReWriter(SText: string):string;
var
  i: byte;
  S: string;
begin
S:='';

Katus вне форума   Ответить с цитированием
Старый 30.11.2011, 22:23   #8
Katus
Форумчанин
 
Регистрация: 30.11.2011
Сообщений: 161
Репутация: 51
По умолчанию

Код:

for i:=1 to length(SText) do
  begin
  case SText[i] of
  '&#192;','&#224;': S:=S+'A';
  '&#193;','&#225;': S:=S+'B';
  '&#194;','&#226;': S:=S+'V';
  '&#195;','&#227;': S:=S+'G';
  '&#196;','&#228;': S:=S+'D';
  '&#197;','&#229;': S:=S+'E';
  '&#168;','&#184;': S:=S+'YO';
  '&#198;','&#230;': S:=S+'ZH';
  '&#199;','&#231;': S:=S+'Z';
  '&#200;','&#232;': S:=S+'I';
  '&#201;','&#233;': S:=S+'J';
  '&#202;','&#234;': S:=S+'K';
  '&#203;','&#235;': S:=S+'L';
  '&#204;','&#236;': S:=S+'M';
  '&#205;','&#237;': S:=S+'N';
  '&#206;','&#238;': S:=S+'O';
  '&#207;','&#239;': S:=S+'P';
  '&#208;','&#240;': S:=S+'R';
  '&#209;','&#241;': S:=S+'S';
  '&#210;','&#242;': S:=S+'T';
  '&#211;','&#243;': S:=S+'U';
  '&#212;','&#244;': S:=S+'F';
  '&#213;','&#245;': S:=S+'H';
  '&#214;','&#246;': S:=S+'C';
  '&#215;','&#247;': S:=S+'CH';
  '&#216;','&#248;': S:=S+'SH';
  '&#217;','&#249;': S:=S+'SCH';
  '&#218;','&#250;': S:=S+'j';
  '&#219;','&#251;': S:=S+'Y';
  '&#220;','&#252;': S:=S+'y';
  '&#221;','&#253;': S:=S+'YE';
  '&#222;','&#254;': S:=S+'YU';
  '&#223;','&#255;': S:=S+'YA';
  end;
  end;
ReWriter:=S;
end;

procedure MainWriter(n: cardinal);
begin
with Form1 do
  begin
    Queshion.Caption:='&#194;&#238;&#239;&#240;&#238;&#241;:'+#13+Quest[n, vrnt, 0];
    Variant1.Caption:='1) '+ Quest[n, vrnt, 1];
    Variant2.Caption:='2) '+ Quest[n, vrnt, 2];
    Variant3.Caption:='3) '+ Quest[n, vrnt, 3];
    Variant4.Caption:='4) '+ Quest[n, vrnt, 4];
    Variant1.Checked:=False;
    Variant2.Checked:=False;
    Variant3.Checked:=False;
    Variant4.Checked:=False;
  end;
end;

procedure TForm1.ImEndClick(Sender: TObject);
begin
if (Variant1.Checked=False)and(Variant2.Checked=False)and
   (Variant3.Checked=False)and(Variant4.Checked=False)
  then
    ShowMessage('&#194;&#251; &#237;&#229; &#226;&#251;&#225;&#240;&#224;&#235;&#232; &#237;&#232; &#238;&#228;&#237;&#238;&#227;&#238; &#226;&#224;&#240;&#232;&#224;&#237;&#242;&#224; &#238;&#242;&#226;&#229;&#242;&#224;!')
  else
    begin
    n:=n+1;
    Form1.Queshion.Caption:='&#194;&#238;&#239;&#240;&#238;&#241;:'+#13+Quest[n, vrnt, 0];
    Form1.Variant1.Caption:='1) '+ Quest[n, vrnt, 1];
    Form1.Variant2.Caption:='2) '+ Quest[n, vrnt, 2];
    Form1.Variant3.Caption:='3) '+ Quest[n, vrnt, 3];
    Form1.Variant4.Caption:='4) '+ Quest[n, vrnt, 4];
    Form1.Variant1.Checked:=False;
    Form1.Variant2.Checked:=False;
    Form1.Variant3.Checked:=False;
    Form1.Variant4.Checked:=False;
    end;
end;

procedure TForm1.RegerClick(Sender: TObject);
var
  num: byte;
  count: byte;
  f: string;
  IORE: boolean;
  LLL: string[3];
begin
if (NameN.Text='')or(NameSN.Text='')or(NameTN.Text='')or(Gp.Text='')
  then
    ShowMessage('&#199;&#224;&#239;&#238;&#235;&#237;&#232;&#242;&#229; &#226;&#241;&#229; &#239;&#238;&#235;&#255;')
  else
    begin
    Label1.Visible:=False;
    Label2.Visible:=False;
    Label3.Visible:=False;
    Label4.Visible:=False;
    Label5.Visible:=False;
    NameN.Visible:=False;
    NameSN.Visible:=False;
    NameTN.Visible:=False;
    Gp.Visible:=False;
    Tester.FirstName:=NameN.Text;
    Tester.SecondName:=NameSN.Text;
    Tester.ThirdName:=NameTN.Text;
    Tester.Group:=StrToInt(Gp.Text);
    ImEnd.Visible:=True;
    Queshion.Visible:=True;
    Reger.Visible:=False;
    Variant1.Visible:=True;
    Variant2.Visible:=True;
    Variant3.Visible:=True;
    Variant4.Visible:=True;
    Form1.Width:=837;
    Form1.Height:=591;
    SSName:=ReWriter(NameSN.Text);
    SName:=ReWriter(NameN.Text);
    STName:=ReWriter(NameTN.Text);
    FileNameIs:='C:\TEST\G'+Gp.Text+'V'+IntToStr(vrnt)+'STF'+SSName+'STN'+SName+'STO'+STName+'.txt';
    assignfile(FileOfData, FileNameIs);
    num:=0;
    while IOResult=0 do
    begin
    {$I-}
    Reset(FileOfData);
    closefile(FileOfData);
    {$I+}
    if IOResult<>0
      then
        begin
        {$I-}
        assignfile(FileOfData, FileNameIs);
        rewrite(FileOfData);
        append(FileOfData);
        writeln(FileOfData, '&#208;&#229;&#231;&#243;&#235;&#252;&#242;&#224;&#242; &#242;&#229;&#241;&#242;&#232;&#240;&#238;&#226;&#224;&#237;&#232;&#255;');
        writeln(FileOfData, '&#210;&#229;&#241;&#242;&#232;&#240;&#238;&#226;&#224;&#237;&#232;&#229; &#239;&#240;&#238;&#248;&#229;&#235;(&#224;) &#241;&#242;&#243;&#228;&#229;&#237;&#242;(&#234;&#224;) &#227;&#240;&#243;&#239;&#239;&#251; &#185;', Form1.Gp.Text);
        writeln(FileOfData, Form1.NameSN.Text:Length(Form1.NameSN.Text), Form1.NameN.Text:(Length(Form1.NameN.Text)+1), Form1.NameTN.Text:(Length(Form1.NameTN.Text)+1));
        writeln(FileOfData);
        closefile(FileOfData);
        IORE:=False;
        {$I+}
        end
      else
        begin
        num:=num+1;
        case num of
        0..9: LLL:='00'+IntToStr(n);
        10..99: LLL:='0'+IntToStr(n);
        100..255: LLL:=IntToStr(n);
        else ShowMessage('&#207;&#240;&#229;&#226;&#251;&#248;&#229;&#237;&#238; &#228;&#238;&#239;&#243;&#241;&#242;&#232;&#236;&#238;&#229; &#234;&#238;&#235;&#235;&#232;&#247;&#229;&#241;&#242;&#226;&#238; &#238;&#228;&#237;&#238;&#232;&#236;&#229;&#237;&#237;&#251;&#245; &#244;&#224;&#233;&#235;&#238;&#226;');
        end;
        if num=1 then
          for count:=1 to Length(FileNameIs)-4 do
            F:=F+FileNameIs[count]
          else
          for count:=1 to Length(FileNameIs)-7 do
            F:=F+FileNameIs[count];
        FileNameIs:=F+LLL+'.txt';
        assignfile(FileOfData, FileNameIs);
        IORE:=True;
        end;
    end;
    n:=1;
    MainWriter(n);
    end;
end;

procedure TForm1.NameNKeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'&#224;'..'&#255;','&#192;'..'&#223;': ;
#8: ;
else Key:=#0;
end;
end;

procedure TForm1.GpKeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'0'..'9': ;
#8: ;
else Key:=#0;
end;
end;

end.

Katus вне форума   Ответить с цитированием
Старый 30.11.2011, 22:50   #9
Katus
Форумчанин
 
Регистрация: 30.11.2011
Сообщений: 161
Репутация: 51
По умолчанию

Все, спасибо. Я нашел свои ошибки.

Во-первых я использовал "левую" переменную. Вместо NUM подставил N. Получалось одно и то же имя.

Во-вторых не обнулил переменную F, в которой, собственно и заисывался новый адресс... В результате получалось 'C:\<address 1>C:\<address 2>'
Katus вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Access Violation и I/O error 103 без видимых причин whatever Помощь студентам 2 10.12.2010 09:50
Почему через раз вылазить ошибка I/O 103? Marsel737 Общие вопросы Delphi 9 23.10.2010 00:34


13:32.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru