1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программирован. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление
  2. Чат codeby в telegram перезагрузка. Обсуждаем вопросы информационной безопасности и методы защиты информации, программирование. Задавайте свои вопросы и комментируйте чужие. Подробнее ...

    Скрыть объявление

Вопрос по Assignfile

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

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

    Репутация:
    0
    Поиогите чё та не знаю чё делать!

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

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

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

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

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

    LAF Гость

    Репутация:
    0
    И какого она типа?
     
  4. Гость

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

    Barmutik Гость

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

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

    Код:
    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 Гость

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

    Репутация:
    0
    If j=0 then F:=S2;

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

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

    Silver Wind Гость

    Репутация:
    0
    <!--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. Гость

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

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

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

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

    Silver Wind Гость

    Репутация:
    0
    <!--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. Гость

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

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

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


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

    Silver Wind Гость

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

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

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

    Pasha Гость

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

    Silver Wind Гость

    Репутация:
    0
    Код:
    F:\Test>net helpmsg 123
    
    Синтаксическая ошибка в имени файла, имени папки или метке тома.
    И всетаки проблема у тебя именно с именем файла. Отлаживай программу и проверяй что там за имя получается на самом деле.
     
  17. Гость

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


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

    Обошёлся без файла!!
     
Загрузка...
Статус темы:
Закрыта.

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