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

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

Путь в файлу


Dmitrij_K ©   (2006-03-22 10:59:00) 

Как получить полный путь к файлу из такого вида
..\pas\kan_st.pas


Dmitrij_K   (2006-03-22 12:08:00) [1]


> Anatoly Podgoretsky ©   (22.03.06 11:59) [7]
>
> ExpandFilename
>


Спасибо!


Anatoly Podgoretsky   (2006-03-22 11:59:00) [2]

ExpandFilename


DelphiN!   (2006-03-22 11:53:00) [3]

или лучше так

function GetRealPath(Path,CurrentDir: String): String;
var
 i: Integer;
 n: Integer;
begin
 n := 0;
 i := pos('..',Path);
 CurrentDir := GetCurrentDir;
 while i > 0 do
 begin
   CurrentDir := ExtractFilePath(CurrentDir);
   Delete(Path,i,3);
   Inc(n);
   i := pos('..',Path);
 end;
 CurrentDir := GetCurrentDir;
 for i := 0 to n-1 do
 begin
   if i > 0 then
     Delete(CurrentDir,Length(CurrentDir),1);
   CurrentDir := ExtractFilePath(CurrentDir);
 end;
 Result := CurrentDir+Path;
end;

var
 s: String;
begin
 ShowMessage(GetRealPath('..\..\pas\kan_st.pas',GetCurrentDir));
end;


Работает, когда переходов на предыдущий каталог несколько


Dmitrij_K   (2006-03-22 11:49:00) [4]


> DelphiN! ©   (22.03.06 11:43) [4]

Неработает

CurentDir = C:\Documents and Settings\lalala\Рабочий стол\Новая папка (3)\

function daj_path(const aCurDir,aFileName:AnsiString):AnsiString;
var s,z : string;
begin
 GetDir(0,s);
 ChDir(aCurDir);
 ChDir(ExtractFilePath(aFileName));
 GetDir(0,z);
 z := IncludeTrailingPathDelimiter(z) + ExtractFileName(aFileName);
 ChDir(s);
 result := z;
end;

function GetRealPath(Path,CurrentDir: String): String;
var
i: Integer;
begin
i := pos('..',Path);
while i > 0 do
begin
  CurrentDir := GetCurrentDir;
  CurrentDir := ExtractFilePath(CurrentDir);
  Delete(Path,i,3);
  Insert(CurrentDir,Path,i);
  i := pos('..',Path);
end;
Result := Path;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 showmessage(daj_path(ExtractFilePath(paramstr(0)),'..\..\Мои документы\111.htm'));
 showmessage(GetRealPath('..\..\Мои документы\111.htm',ExtractFilePath(paramstr(0))));
end;


DelphiN!   (2006-03-22 11:43:00) [5]


function GetRealPath(Path,CurrentDir: String): String;
var
 i: Integer;
begin
 i := pos('..',Path);
 while i > 0 do
 begin
   CurrentDir := GetCurrentDir;
   CurrentDir := ExtractFilePath(CurrentDir);
   Delete(Path,i,3);
   Insert(CurrentDir,Path,i);
   i := pos('..',Path);
 end;
 Result := Path;
end;

var
 s: String;
begin
 ShowMessage(GetRealPath('..\pas\kan_st.pas',GetCurrentDir));
end;


Dmitrij_K   (2006-03-22 11:40:00) [6]

Что-то в этом духе

function daj_path(const aCurDir,aFileName:AnsiString):AnsiString;
var s : string;
begin
 GetDir(0,s);
 ChDir(ExtractFilePath(aFileName));
 GetDir(0,result);
 result := result + '\' + ExtractFileName(aFileName);
 ChDir(s);
end;


Dmitrij_K   (2006-03-22 11:35:00) [7]

Например
текущая директория c:\projects\lalala\
надо ..\pas\kan_st.pasпреобразовать в c:\projects\pas\kan_st.pas


DelphiN!   (2006-03-22 11:32:00) [8]

Относительно твоей программы?
ExtractFilePath(ExtractFilePath(ParamStr(0))+'pas\kan_st.pas)?


Наверх

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