Меню Рубрики

Delphi временная папка windows

Delphi временная папка windows

Привет всем!
Возник такой вопрос. Пытаюсь следующим образом путь к временному каталогу Windows:

var tmpPath: array[0..255] of char;
WorkTempFolder: string;
begin
GetTempPath(255,tmpPath);
WorkTempFolder:=StrPas(tmpPath);
end;

так вот, затем в WorkTempFolder он хранится в виде «C:\DOCUME

1\Temp».. Короче, в каком-то dos-виде. Далее программа отказывается работать с таким путем — когда необходимо копировать файлы, то пишет об ошибке. Может, существует другая API-функция, позволяющая получать системные каталоги? (смотрел инфу про SHGetSpecialFolderLocation — позволяет получать многие пути, но только не временной папки). Помогите плз найти выход!


Kerk © ( 2005-01-14 12:04 ) [1]

программе пофиг с каким путем работать.. в дос виде или нет. ошибка в другом


kaZaNoVa © ( 2005-01-14 12:04 ) [2]

function SysDir:String;
var
Buf:array[0..MAX_PATH] of Char;
begin
GetSystemDirectory(@buf, MAX_PATH+1);
Result := buf;
end;

function TempDir:String;
var
Buf:array[0..MAX_PATH] of Char;
begin
GetTempPath(MAX_PATH+1, @buf);
Result := buf;
end;

Спасибо, заработало. :). А может поясните вкратце, если не сложно, в чем ошибка-то?


Sumor ( 2005-01-14 18:39 ) [4]

Я попробовал и так, и так — результат одинаковый.
Проблема возможно дальше, некоторые функции хотят строку с завершающим нулём, некоторые типа String, и главное не перепутать

Пожалуйста:
function c_GetTempPath: string;
var
Buffer: array[0..1023] of Char;
begin
SetString(Result, Buffer, GetTempPath(Sizeof(Buffer) — 1, Buffer));
end;
И всё работает.


Sumor ( 2005-01-14 20:22 ) [6]

В [4]: Результат одинаковый — читать как «оба варианта функции работали правильно» 🙂

А не проще ли через переменную-окружение?

ExpandEnvironmentStrings(«%TEMP%», Stroka, 255);

Источник

Delphi временная папка windows

О проблемах, например, с регистрацией пишите сюда — alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Форум программистов > Delphi программирование > Общие вопросы Delphi
Узнать пути к временным папкам
Регистрация

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда — alarforum@yandex.ru
Без учёта ботов — 20000 человек в день, 350000 в месяц.

надо узнать путь к временным папкам.

var
buf:string;
len:UINT;
begin
SetLength(buf, MAX_PATH+1);
len:=GetTempPath(MAX_PATH, PAnsiChar(buf));
SetLength(buf,len);
GetTempDir:=buf — получается пользовательский темп

потом делал через s:=GetEnvironmentVariable(‘temp’); и получается опять только пользовательский темп

Мне надо еще хотябы виндосовский темп и рабочий стол. Помогите плиз

Но временная папка стоит особняком. GetTempPath — это единственный способ её получить.

И, кстати, понятия «системная папка Temp» не существует (о чём чёрным по белому сказано в описании GetTempPath). Поэтому не очень понятно, что имеется в виду под «виндосовский темп».

Источник

Delphi временная папка windows

Paranoik
Дата 24.7.2006, 02:34 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 49
Регистрация: 5.6.2006

Репутация: 1
Всего: 0

Шустрый

Профиль
Группа: Участник
Сообщений: 106
Регистрация: 3.7.2006
Где: Москва

Репутация: 1
Всего: 1

Mr.Floppy
Дата 24.7.2006, 02:40 (ссылка) | (нет голосов) Загрузка .
Bose
Дата 24.7.2006, 02:49 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51

Её кстати не обязательно знать. Можно воспользоваться переменной окружения %temp%.
Как пример попробуй в командной строке набрать:

и ты увидишь список файлов из Temp каталога.

Akella
Дата 24.7.2006, 08:36 (ссылка) | (нет голосов) Загрузка .

Творец

Профиль
Группа: Модератор
Сообщений: 18484
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329

Код
type
TSystemPath=(Desktop, StartMenu, Programs, ProgramFiles, Startup, Personal, winroot, winsys, WinTemp);
TfmMain = class(TForm)
.

public
Function GetSystemPath(SystemPath:TSystemPath):string;

Function TfmMain.GetSystemPath(SystemPath:TSystemPath):string;
var
p:pchar;
Buffer: array[0..1023] of Char;
begin
with TRegistry.Create do
try
RootKey := HKEY_CURRENT_USER;
OpenKey(‘\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders’, True);
case SystemPath of
Desktop : Result := ReadString(‘Desktop’);
StartMenu : Result := ReadString(‘Start Menu’);
Programs : Result := ReadString(‘ProgramFiles’);
Startup : Result := ReadString(‘Startup’);
Personal : Result := ReadString(‘Personal’);
WinTemp : SetString(Result, Buffer, GetTempPath(Sizeof(Buffer)-1,Buffer));
Winroot : begin
GetMem(p,255);
GetWindowsDirectory(p,254);
result:=Strpas(p);
Freemem(p);
end;//winroot
WinSys : begin
GetMem(p,255);
GetSystemDirectory(p,254);
result:=Strpas(p);
Freemem(p);
end;//winsys
ProgramFiles: begin
CloseKey;
RootKey := HKEY_LOCAL_MACHINE;
OpenKey(‘\Software\Microsoft\Windows\CurrentVersion’, FALSE);
Result:=ReadString(‘ProgramFilesDir’);
if Result = » then Result:=’C:\Program Files\’;
end;
end;//case
finally
result := IncludeTrailingPathDelimiter(result);
CloseKey;
free;
end;//try-finally

Yanis
Дата 24.7.2006, 09:09 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111

Добавлено @ 09:17
Путь к системной папке Temp по умолчанию равен %SystemRoot%\TEMP. Прочитать его значение можно из реестра:

Код
const
REG_SYSTEM_TEMP = ‘\SYSTEM\CurrentControlSet\Control\Session Manager\Environment’;
var
r: TRegistry;
begin
r := TRegistry.Create(KEY_READ);
with r do
begin
try
RootKey := HKEY_LOCAL_MACHINE;
OpenKey(REG_SYSTEM_TEMP, False);
ShowMessage(ReadString(‘TEMP’));
finally
FreeAndNil(r);
end;
end;
end;
Akella
Дата 24.7.2006, 09:50 (ссылка) | (нет голосов) Загрузка .

Творец

Профиль
Группа: Модератор
Сообщений: 18484
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329

Цитата(Paranoik @ 24.7.2006, 02:34 )
Как скопировать файл во временную директорию, а потом прочитать его оттуда?
Код
Var
StringList2,StringList:TStringList;
begin
StringList := TStringList.create;
StringList2 := TStringList.create;

FreeAndNil(StringList);
FreeAndNil(StringList2);

kostas
Дата 24.7.2006, 10:33 (ссылка) | (нет голосов) Загрузка .

Шустрый

Профиль
Группа: Участник
Сообщений: 100
Регистрация: 21.7.2006

Репутация: 3
Всего: 4

Yanis
Дата 24.7.2006, 18:55 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111

Цитата(kostas @ 24.7.2006, 11:33 )
Кажется в делфи (по крайней мере 7) есть встроенные средства для создания временных файлов и поиска директрии Temp
kostas
Дата 24.7.2006, 20:09 (ссылка) | (нет голосов) Загрузка .

Шустрый

Профиль
Группа: Участник
Сообщений: 100
Регистрация: 21.7.2006

Репутация: 3
Всего: 4

Шустрый

Профиль
Группа: Участник
Сообщений: 66
Регистрация: 16.4.2006

Репутация: нет
Всего: нет

denks
Дата 24.7.2006, 22:26 (ссылка) | (нет голосов) Загрузка .
Код
function StrPas(const Str: PChar): string;
begin
Result := Str;
end;

function GetTempDir: string;
var
Buffer: array[0..MAX_PATH] of Char;
begin
GetTempPath(SizeOf(Buffer) — 1, Buffer);
Result := StrPas(Buffer);
end;

Функция GetTempDir непосредственно возвращает путь к директории TEMP

Профиль
Группа: Участник
Сообщений: 14
Регистрация: 11.5.2006
Где: 58 RU

Репутация: нет
Всего: нет

При компиляции данного кода в Delphi 2009 вер.12.0 столкнулся со следующей проблемой при определении пути системного темпа ../windows/temp
а именно после верного нахождения пути к системному темпу (в переменную st) программа самозавершается с ошибкой «Project gettemp.exe faulted with message: ‘access violation at 0x00000000: read of address 0x00000000’. Process stoped. Use Step or Run to continue.».
в более ранней версии Delphi 2005 вер.9.0 с немного измененным кодом (Buffer: array[0..1023] of Char;) программа работает корректно.

Может быть кто то объяснит в чем причина и как с этим бороться?

iskatel2
Дата 25.12.2008, 19:21 (ссылка) | (нет голосов) Загрузка .
Код
procedure TForm1.Button1Click(Sender: TObject);
var
Buffer: array[0..1023] of WideChar;
st:string;
begin
try
SetString(st, Buffer, GetTempPath(Sizeof(Buffer)-1,Buffer));
except
end;
ShowMessage(st);
end;

Это сообщение отредактировал(а) iskatel2 — 25.12.2008, 19:22

Akella
Дата 25.12.2008, 19:51 (ссылка) | (нет голосов) Загрузка .

Творец

Профиль
Группа: Модератор
Сообщений: 18484
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329

Код
procedure TForm6.Button1Click(Sender: TObject);
var
Buffer: array[0..MAX_PATH] of Char;
st:string;
begin
GetTempPath(SizeOf(Buffer) — 1, Buffer);
ShowMessage(StrPas(Buffer));
end;

Это сообщение отредактировал(а) Akella — 25.12.2008, 19:57

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89

CodeMonkey
Дата 25.12.2008, 21:43 (ссылка) | (голосов:2) Загрузка .
Код
procedure TForm1.FormCreate(Sender: TObject);
var
Buffer: array[0..MAX_PATH] of Char;
begin
GetTempPath((SizeOf(Buffer) div SizeOf(Char)) — 1, Buffer);
Caption := Buffer;
end;

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) — крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »

[ Время генерации скрипта: 0.1771 ] [ Использовано запросов: 21 ] [ GZIP включён ]

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Delphi windows имя пользователя
  • Delphi windows socket error 10057
  • Delphi manifest windows 10
  • Delphi cars windows 10
  • Delphi 7 не устанавливается на windows 7