Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ввод\вывод в консоли [D7, WinXP]


STUDENT_RU ©   (2005-10-06 10:11:00) 

Здравствуйте...
Помогите, пожалуйста, найти ошибку. Замучился вже..

В общем, есть код:

uses
  Windows, SysUtils, shellapi, StrUtils, System;

var  
  inp: TextFile;
  ...

begin
  AssignFile(inp, 'input1.txt');
  Reset(inp);
  Readln(inp, path);
  Readln(inp, TypeOfFile);
  Readln(inp, Old);
  CloseFile(inp);
  ...


Программа консольная. Необходимо запускать ее из CMD.
Проблема:Обычным способом она запускается. При попытке запустить ее из командной строки выдается сообщение:
Exception EInOutError in module KillOld.Exe 0004D489.
File not Found. Файл input1.txt находится в каталоге программы.
Причем, если я вместо 'input1.txt' указываю полное имя файла с путем, все работает отлично. Если же я начинаю формировать это имя в переменной при помощи функции GetCurrentDir, а затем эту переменну использую в качестве второго параметра в AssignFile, программа не запускается, и выдается указанное выше сообщение об ошибке. В чем проблема?
Спасибо...


Anatoly Podgoretsky   (2005-10-06 15:18:00) [1]

STUDENT_RU   (06.10.05 10:11)  
 AssignFile(inp, 'input1.txt');

File not Found. Файл input1.txt находится в каталоге программы.

И где этот каталог программы здесь?


Silver...   (2005-10-06 13:48:00) [2]

вроде выглядет верно

чему равен FileCatпосле FileCat:= GetCurrentDir;

По моему будет лучше

File:= ExtractFilePath(ParamStr(0)) + {БЕЗ \} File_Name;


Silver...   (2005-10-06 13:47:00) [3]

вроде выглядет верно

чему равен FileCatпосле FileCat:= GetCurrentDir;

Po moemu budet luchshe

File:= ExtractFilePath(ParamStr(0)) + {БЕЗ \} File_Name;


STUDENT_RU   (2005-10-06 13:23:00) [4]

program KillOld;
{$APPTYPE CONSOLE}

uses
  Windows, SysUtils, shellapi, StrUtils, System;

var
  i: Integer;
  FileCat, path: String;
  TypeOfFile: String;
  Old: String;
  LenNames: array of Integer;
  inp: TextFile;
  intFileAge: LongInt;  

procedure FindF(dir: string);
var
  SR: TSearchRec;  
begin
  if FindFirst(dir, faAnyFile, SR) = 0 then
     begin
        repeat
           if SR.attr = faDirectory then
              begin
                 if (SR.Name <> '.') and (SR.Name <> '..') then
                    begin
                       SetLength(lennames, i + 1);
                       LenNames[i]:= length(SR.Name) + 1;
                       i:= i + 1;
                       path:= path + SR.Name + '\';
                       FindF(path + '*.*');
                    end;
              end
           else if RightStr(SR.Name,Length(TypeOfFile)) = TypeOfFile then
              begin
                 intFileAge := FileAge(path+SR.Name);
                 if Date-FileDateToDateTime(intFileAge) >= StrToInt(Old) then
                    DeleteFile(pChar(path + sr.Name));
              end;
        until FindNext(SR) <> 0;
        path:= LeftStr(path, (length(path) - LenNames[i - 1]));
        dec(i);
        FindClose(SR);
     end;
end;                              

begin
  i:= 0;
  path:= '';

  FileCat:= GetCurrentDir;
  AssignFile(inp, FileCat + '\input1.txt');
  Reset(inp);
  Readln(inp, path);
  Readln(inp, TypeOfFile);
  Readln(inp, Old);
  CloseFile(inp);
  path:= path + '\';

  FindF(path + '*.*');
end.


Silver...   (2005-10-06 13:09:00) [5]

inp: TextFile ???


>  Readln(inp, path);
>  Readln(inp, TypeOfFile);
>  Readln(inp, Old);


???


STUDENT_RU   (2005-10-06 13:01:00) [6]


> AssignFile() выдаёт ошибку? Не верю!!!


Ну если я убираю из модуля этот кусок кода:
 
 ...
 AssignFile(inp, 'input1.txt');
 Reset(inp);
 Readln(inp, path);
 Readln(inp, TypeOfFile);
 Readln(inp, Old);
 CloseFile(inp);
 ...
,

а значения path, TypeOfFile, Oldзадаю константами и все работает, то где тогда ошибка?!


Чапаев   (2005-10-06 12:44:00) [7]

AssignFile() выдаёт ошибку? Не верю!!!


STUDENT_RU   (2005-10-06 12:19:00) [8]


> Хм... А ты понимаешь, что такое GetCurrentDir? Может, стоит
> посмотреть в сторону ParamStr(0)?


Так почему же если у меня в переменной, допустим, Path типа String находится 'С:\Temp\Test\Input1.txt', то:
AssignFile(inp, path);
выдает данную ошибку?


Leonid Troyanovsky   (2005-10-06 11:48:00) [9]


> STUDENT_RU   (06.10.05 10:11)  

>  В чем проблема?


Никогда не следует имя файла включать в код.
Консольная программа вполне может получить его в качестве параметра
комстроки или, скажем, из ее настроек.
В самом общем случае имя этого файла должно быть полным,
т.е., включать полный путь.
И не надо делать никаких предположений относительно того,
где находится сама программа и тот самый файл.

--
Regards, LVT.


Чапаев   (2005-10-06 11:46:00) [10]


> Если же я начинаю формировать это имя в переменной при помощи
> функции GetCurrentDir

Хм... А ты понимаешь, что такое GetCurrentDir? Может, стоит посмотреть в сторону ParamStr(0)?


Наверх

Титульная страница Поиск, карта сайта Написать письмо