Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2010, 12:40   #1
T-dayne
Пользователь
 
Аватар для T-dayne
 
Регистрация: 07.02.2010
Сообщений: 54
По умолчанию Преобразовать путь файла из старого формата

Снова здрасте:D

В функцию paramstr(1) передается путь к файлу при открытии программы. Так вот, если я открываю его, например, на диске C, то путь такой:
Код HTML:
"С:\file.txt"
, а вот если на рабочем столе, то передается это:
Код HTML:
C:\DOCUME~1\Admin\0016~1\8636~1.TXT
Естественно такой путь дельфи не воспринимает, и загрузить файл например в Memo, невозможно. Как можно получить полный путь?
По идее просто нужна функция которая переведет формат пути в новый формат

спасибо
T-dayne вне форума Ответить с цитированием
Старый 04.07.2010, 12:47   #2
fbus
Форумчанин
 
Аватар для fbus
 
Регистрация: 23.10.2008
Сообщений: 460
По умолчанию

вопрос интересный. попробуй
Код:
var path:string;
Path:=ExtractFilePath(paramstr(1));
fbus вне форума Ответить с цитированием
Старый 04.07.2010, 12:50   #3
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Цитата:
Сообщение от T-dayne Посмотреть сообщение
а вот если на рабочем столе
На рабочем столе находится ссылка на объект, а вот путь к этому объекту можно узнать из свойтсв этой ссылки (см. Свойства-->Ярлык-->Объект. Тут тебе и будет путь к объекту).

Преобразование пути из короткой формы в длинную

Код:
function ChortToLong(path:string):string;
var
  buf:string;
  len:integer;
begin
  SetLength(buf,MAX_PATH);
 len:=GetLongPathName(PAnsiChar(path),PAnsiChar(buf),MAX_PATH);
 SetLength(buf,len);
ShortToLong:=buf
end;
Перемешивай дело с бездельем и не сойдешь с ума...

Последний раз редактировалось Stilet; 05.07.2010 в 09:09.
Grag вне форума Ответить с цитированием
Старый 04.07.2010, 13:13   #4
T-dayne
Пользователь
 
Аватар для T-dayne
 
Регистрация: 07.02.2010
Сообщений: 54
По умолчанию

fbus извлекается путь из данного адреса, т.е.:
Цитата:
C:\DOCUME~1\Admin\0016~1\
(

Grag
Функция не компилируется ругается на
Цитата:
[Error] Undeclared identifier: 'GetLongPathName'
ShellAPI в Uses не помогает.(
T-dayne вне форума Ответить с цитированием
Старый 04.07.2010, 13:21   #5
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Цитата:
Сообщение от T-dayne Посмотреть сообщение
Grag
ShellAPI в Uses не помогает.(
API-функция GetLongPathName объявлена в модуле Windows... По крайней мере в Delphi 7...
Перемешивай дело с бездельем и не сойдешь с ума...

Последний раз редактировалось Grag; 04.07.2010 в 13:23.
Grag вне форума Ответить с цитированием
Старый 04.07.2010, 13:27   #6
T-dayne
Пользователь
 
Аватар для T-dayne
 
Регистрация: 07.02.2010
Сообщений: 54
По умолчанию

Нет там такой. Только что проверил. У меня делфи 7.
T-dayne вне форума Ответить с цитированием
Старый 04.07.2010, 13:54   #7
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Ну, тогда остается импортировать эту функцию из библиотеки kernel32.
Вот тебе код модуля, компилируется без ошибок...

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }




  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
function GetLongPathName(lpszLongPath:PChar;lpszShortPath:PChar;
               cchBuffer:DWORD):DWORD;
                             stdcall; external kernel32 name 'GetLongPathNameA';

function ShortToLong(path:string):string;
var
  buf:string;
  len:dword;
begin
  SetLength(buf,MAX_PATH);
  len:=GetLongPathName(PAnsiChar(path),PAnsiChar(buf),MAX_PATH);
 SetLength(buf,len);
ShortToLong:=buf
end;



end.
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 04.07.2010, 14:38   #8
T-dayne
Пользователь
 
Аватар для T-dayne
 
Регистрация: 07.02.2010
Сообщений: 54
По умолчанию

Grag
Спасибо, ++
T-dayne вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
После наведения курсора на линк нужен выбор формата файла для скачивания armansystem HTML и CSS 0 25.05.2010 22:33
проблема с изменением формата даты при копировании из CSV формата в эксель mars56 Microsoft Office Excel 4 16.03.2010 09:50
Путь до файла nix01d Общие вопросы Delphi 6 26.10.2009 22:41
ShellExecute и путь до файла k1r1ch Общие вопросы Delphi 4 28.06.2009 19:56
преобразовать два формата даты в один olimpus Microsoft Office Excel 2 18.09.2008 09:16