Вопрос по Assignfile

Тема в разделе "Delphi - Система", создана пользователем -, 16 окт 2007.

Статус темы:
Закрыта.
  1. Гость

    Поиогите чё та не знаю чё делать!

    Пишу
    AssignFile(имя,'C:\...\'+F+'.txt'); (F это переменая в которой хранится имя файла)
    Rewrite(имя);вот сюда ссылается

    А если убираю перененую F из пути 'C:\...\1.txt'); тогда всё ок

    В чём дело? Подскажите!
     
  2. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: Дрон
    и чему же равна переменная F
     
  3. LAF

    LAF Гость

    И какого она типа?
     
  4. Гость

    Эта переменая преобразуется путём не сложного отбора из стрики переданой по сети через сокет!
    Строка полученая из сокета AnsiString
     
  5. Barmutik

    Barmutik Гость

    Залогируйте какое значение в неё приходит...
     
  6. Гость

    Извините конечно что я сразу весь код выложил! Просто что сразу было видно где и что и что я хочу осуществить! Бууду очень благодарен за помощь!
    Напомню что проблема состоит в том что файл не создаётся! Ругается на команду Rewrite!
    А вот если я убираю переменую F то всё ок!

    Код (Text):
    procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
    Socket: TCustomWinSocket);
    var
    za,S1,S2: AnsiString;
    z: Integer;
    begin
    S1 := Socket.ReceiveText; {Присваиваем S1 полученную строку из Socket}
    za:=''; //Эта переменая служит для определения таблицы в которую нужно записать пришедшие данные
    z := 0;
    za:= Copy(S1, 1, 1);
    Delete(S1, 1, 1 + Length(Delitel) - 1);
    IF za='1' then
    begin
    DBNavigator1.BtnClick(nbInsert);
    DBNavigator1.BtnClick(nbEdit);
    end
    else
    begin
    DBNavigator2.BtnClick(nbInsert);
    DBNavigator2.BtnClick(nbEdit);
    end;
    repeat {Разделяем строку, если одновременно пришло несколько}
    z := Pos(Delitel, S1); {Ищем раздлелитель Delitel в строке S1}
    if z <> 0 then {Если найден делитель, тогда ...
    Если не найден, то вы не добавили в конце отсылаемой строки Delitel !}
    begin
    S2 := Copy(S1, 1, z - 1); {Копируем одну пришедшую строку в S2}
    Delete(S1, 1, z + Length(Delitel) - 1); {Удаляем уже скопированную строку}
    If za='1'then Table1.Fields.Fields[j].Text:=S2
    else
    begin
    If j=0 then F:=S2;
    If j<=5 then Table2.Fields.Fields[j].Text:=S2 else Memo1.Lines.Add(S2);
    end;
    j:=j+1;
    {Вызываем процедуру обработки полученных строк,
    где S2 наша выделенная строка}
    end;
    until z = 0; {Повторять, пока будет не найден разделитель Delitel}
    IF za='1' then DBNavigator1.BtnClick(nbPost) else DBNavigator2.BtnClick(nbPost);
    [b]IF za='2' then
    begin
    AssignFile(outfile, 'C:\Test\Архив\'+F+'.txt');
    ReWrite(outfile);
    Writeln(outfile,str);
    CloseFile(outfile);
    end;[/b]
    j:=0;
    end;
    Const
    Delitel: string = #13#10; ЭТО делитель!

    В команде ошибка извините там нужно
    Writeln(outfile,Memo1.Text);
     
  7. Silver Wind

    Silver Wind Гость

    1. Где описание переменной outfile?
    2. В приведенном коде нет ни описания переменной F, ни присваивания ей какого-либо значения.
     
  8. Гость

    If j=0 then F:=S2;

    Вот присваевание !

    А описание переменой F:string;
    outfile:textfile;
     
  9. Silver Wind

    Silver Wind Гость

    <!--QuoteBegin-Дрон+19:10:2007, 12:23 -->
    <span class="vbquote">(Дрон @ 19:10:2007, 12:23 )</span><!--QuoteEBegin-->If j=0 then F:=S2;
    [snapback]82346" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Не заметил, но всеравно не айс, где инициализация переменнной F? Если If j=0 then F:=S2; так ни разу и не выполнится, то вобще говоря непонятно что там будет, поскольку переменная походу глобальная (в этой процедуре я ее описания не вижу).

    А вообще просто ставишь точку останова на эту строчку и проверяешь в отладчике что там твориться.
     
  10. Гость

    А что есть различие в действии переменой глобальная или локальная она?

    Через отладчик не пробовал! Пробовал сообщением выводить переменую F там всё нормально F равно
    тому что нужно, а всё равно на Rewrite ругается!

    Как я тока не пробовал и Pansichar писал всё равно не хочет

    AssignFile(outfile,PansiChar('C:\Test\Архив\'+F+'.txt'));
     
  11. Silver Wind

    Silver Wind Гость

    <!--QuoteBegin-Дрон+19:10:2007, 20:08 -->
    <span class="vbquote">(Дрон @ 19:10:2007, 20:08 )</span><!--QuoteEBegin-->А что есть различие в действии переменой глобальная или локальная она?
    [snapback]82420" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Речь о том, что если она глобальная и используется где-то еще, то в момент вызова этой процедурки в ней может оказаться какой-то мусор, и если кусок кода в котором есть присваивание ей нового значения не выполниться, а это вполне возможно, то этот мусор попадет в название файла.

    <!--QuoteBegin-Дрон+19:10:2007, 20:08 -->
    <span class="vbquote">(Дрон @ 19:10:2007, 20:08 )</span><!--QuoteEBegin-->Через отладчик не пробовал!
    [snapback]82420" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    :)
    А ведь именно на это Вам намекают с первого же ответа. Зачем тогда вобще отладка нужна?

    А насчет типа переменной, если она и вправду string, то никакого шаманства со строковыми типами не надо.
     
  12. Гость

    А какой толк через отладчик! Я же через сообщение выводил переменую F и она рвна тому что надо

    Да и толадчик мне тоже самое покажит!

    Пременая больше ни где не используется!


    Примерно хоть подскажите в какую сторону Капать!
     
  13. Silver Wind

    Silver Wind Гость

    <!--QuoteBegin-Дрон+20:10:2007, 12:11 -->
    <span class="vbquote">(Дрон @ 20:10:2007, 12:11 )</span><!--QuoteEBegin-->Пременая больше ни где не используется!
    [snapback]82475" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Тогда всеже порекомендую переменные F и outfile сделать локальными.

    Если ругается на Rewrite, то может и не в имени файла проблема, а, например, в доступе к файлу. Не может оказаться что ты его уже где-то в программе открыл? Какая именно ошибка возникает? Попробуй так:
    Код (Text):
    AssignFile(outfile, 'C:\Test\Архив\'+F+'.txt');
    {$I-}
    ReWrite(outfile);
    {$I+}
    ShowMessage('Ошибка #'+IntToStr(IOResult));
    И по полученному коду ошибки посмотри в чем проблема.
     
  14. Гость

    Я файл больше в программе не открывал. Ошибка возникает при создании файла. I/O#123. Наверное не может записать данные.

    Нашёл другой выход, файл создаётся без имени.
     
  15. Pasha

    Pasha Гость

    Для: Дрон
    Т.е. без имени создается, а с именем нет? Может у тебя места на диске не хватает, чтобы имя файла записать 0.o
    А если серьезно - попробовал бы хоть MessageBox-ом выводить строчку 'C:\Test\Архив\'+F+'.txt' перед открытием файла, если отладить не можешь.
     
  16. Silver Wind

    Silver Wind Гость

    Код (Text):
    F:\Test>net helpmsg 123

    Синтаксическая ошибка в имени файла, имени папки или метке тома.
    И всетаки проблема у тебя именно с именем файла. Отлаживай программу и проверяй что там за имя получается на самом деле.
     
  17. Гость

    Для:pasha
    я выводил через МessageDlg!!!!Разницы нет!!


    Всем спасибо ! Решить эту проблему не смог.

    Обошёлся без файла!!
     
Загрузка...
Похожие Темы - Вопрос по Assignfile
  1. ApplePen
    Ответов:
    0
    Просмотров:
    64
  2. gURaBA_N
    Ответов:
    3
    Просмотров:
    94
  3. kartaman
    Ответов:
    0
    Просмотров:
    128
  4. Peter
    Ответов:
    4
    Просмотров:
    524
  5. di0d_
    Ответов:
    1
    Просмотров:
    440
Статус темы:
Закрыта.

Поделиться этой страницей