![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ввод\вывод в консоли [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)?