Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.03.2015, 14:20
Eldar1991 Eldar1991 вне форума
Прохожий
 
Регистрация: 02.03.2015
Сообщения: 21
Версия Delphi: delphi7
Репутация: 10
По умолчанию Копирование из из папки текущего пользователя

Здравствуйте уважаемые форумчане! Изучаю Делфи чуть более месяца, одной из поставленых задач является копирование информации из директории текущего пользователя. копировать папку решил этим методом, он рабочий.
Код:
application.ProcessMessages();
  FillChar(Buffer, sizeof(Buffer), #0);
  p := @buffer;
  StrECopy(p, PChar(FromFolder)); //îòêóäà
  FillChar(Fo, sizeof(Fo), #0);
  Fo.Wnd    := Application.Handle;
  Fo.wFunc  := FO_COPY;
  Fo.pFrom  := @Buffer;
  Fo.pTo    := PChar(ToFolder); //êóäà
  Fo.fFlags := 0;
  if ((SHFileOperation(Fo) <> 0) or (Fo.fAnyOperationsAborted <> false)) then
    ShowMessage('File copy process cancelled')
и все бы хорошо, да вот только как мне адрес указать правильно синтаксически?иначе прога не видит что копировать. до этого в батнике я указывал %USERPROFILE% и было очень удобно. А как быть здесь? подскажите, заранее спасибо))
Ответить с цитированием
  #2  
Старый 08.03.2015, 15:00
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
function GetSpecialFolderLocation(Folder: Integer): String;
var
  ppidl: PItemIDList;
begin
  Result:='';
  ppidl:=nil;
  try
    if SHGetSpecialFolderLocation(0, Folder, ppidl)=S_OK then
    begin
      SetLength(Result, MAX_PATH);
      if SHGetPathFromIDList(ppidl, PChar(Result)) then
        Result:=IncludeTrailingPathDelimiter(PChar(Result))
      else
        Result:='';
    end;
  finally
    if ppidl<>nil then CoTaskMemFree(ppidl);
  end;
end;

Код:
GetSpecialFolderLocation(CSIDL_APPDATA);
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 09.03.2015, 09:37
Eldar1991 Eldar1991 вне форума
Прохожий
 
Регистрация: 02.03.2015
Сообщения: 21
Версия Delphi: delphi7
Репутация: 10
По умолчанию

Вопросов у меня много постараюсь все сократить))Я видел нечто подобное одно даже есть в коде и компилируется. вот такое:
Код:
function GetSpecialPath(CSIDL: word): string;
var s: string;
begin
SetLength(s, MAX_PATH);
if not SHGetSpecialFolderPath(0, PChar(s), CSIDL, true)
then s := '';
result := PChar(s);
end;
Суть в чем, во первых я не могу понять что подобные функции делают, точнее как они работают, это очень важно. Во вторых, каким образом она грамотно применяется я пробовал указывать
Код:
if FileExists(GetSpecialPath('\AppData\Local'))
так он ругается что типы Word и String несовместимы. В третьих, Предложенный Вами метод мне также неясен, остается догадываться что он более совершенен чем указанный мной, только скажите пожалуйста где мне описать переменную CoTaskMemFree, ибо она не обозначена на что он также ругается. В четвертых, как будет указываться путь при применении такой функции, то бишь если на одном компьютере имя пользователя ПК а на другом ПК-1 соответственно это уже совсем другой путь. то что раньше было через Userprofile. Прошу содействия.
Ответить с цитированием
  #4  
Старый 09.03.2015, 11:02
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

SHGetSpecialFolderLocation
SHGetPathFromIDList
CSIDL
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:22.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter