Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.30;
Скачать: CL | DM;

Вниз

Ввод вывод в консоли   Найти похожие ветки 

 
STUDENT_RU   (2005-10-06 10:11) [0]

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

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

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, программа не запускается, и выдается указанное выше сообщение об ошибке. В чем проблема?
Спасибо...


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


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

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


 
Leonid Troyanovsky ©   (2005-10-06 11:48) [2]


> STUDENT_RU   (06.10.05 10:11)  

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


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

--
Regards, LVT.


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


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


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


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

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


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


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


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

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


 
Silver... ©   (2005-10-06 13:09) [6]

inp: TextFile ???


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


???


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

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:47) [8]

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

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

Po moemu budet luchshe

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


 
Silver... ©   (2005-10-06 13:48) [9]

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

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

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

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


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

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

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

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



Страницы: 1 вся ветка

Текущий архив: 2005.10.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.041 c
4-1124778504
officeman
2005-08-23 10:28
2005.10.30
как получить полный путь каталога "Рабочий стол"


8-1117795818
Dr. Andrew
2005-06-03 14:50
2005.10.30
Как создать "розовый" шум (pink noise) c библиотекой BASS?


2-1128514527
SergP.
2005-10-05 16:15
2005.10.30
StrToDateTime, формат даты


14-1128441313
lookin
2005-10-04 19:55
2005.10.30
Автовставка имен модулей в uses


3-1126973127
Tonich
2005-09-17 20:05
2005.10.30
Числа в базе данных