Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Путь к временной директории, узнать... 
V
    Опции темы
Paranoik
  Дата 24.7.2006, 02:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Как скопировать файл во временную директорию, а потом прочитать его оттуда?
Или хотя бы помогите определить путь к ней... 
PM MAIL   Вверх
Mr.Floppy
Дата 24.7.2006, 02:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Путь к TEMP хранится в реестре, HKEY_CURRENT_USER\Environment\TEMP
О том, как читать из реестра и копировать файлы, ты найдешь в поиске. 
PM MAIL   Вверх
Bose
Дата 24.7.2006, 02:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



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

dir %temp%

и ты увидишь список файлов из Temp каталога. smile  
PM MAIL WWW Skype   Вверх
Akella
Дата 24.7.2006, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 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;

...



implementation


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

end;


 
PM MAIL   Вверх
Yanis
Дата 24.7.2006, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Данный код выведет сообщение с месторасположением папки Temp текущего пользователя:
Код
ShowMessage(GetEnvironmentVariable('Temp'));


Добавлено @ 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;
 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Akella
Дата 24.7.2006, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Цитата(Paranoik @  24.7.2006,  02:34 Найти цитируемый пост)
Как скопировать файл во временную директорию, а потом прочитать его оттуда?

Код

Var
 StringList2,StringList:TStringList;
begin
  StringList   := TStringList.create;
  StringList2 := TStringList.create;

StringList.Add('новая строка');
StringList.SaveToFile(GetSystemPath(WinTemp)+'MyFile.tmp');

...
StringList2.LoadFomFile(GetSystemPath(WinTemp)+'MyFile.tmp');

FreeAndNil(StringList);
FreeAndNil(StringList2);
 
PM MAIL   Вверх
kostas
Дата 24.7.2006, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Кажется в делфи (по крайней мере 7) есть встроенные средства для создания временных файлов и поиска директрии Temp. Находятся в модуле Windows. 
PM ICQ   Вверх
Yanis
Дата 24.7.2006, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



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

Эти средства встроены в ОС, а не в Delphi. В Delphi только заголовки. 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
kostas
Дата 24.7.2006, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Сути не меняет smile я просто сам не пользовался, а где то видел, поэтому и сказал так. 
PM ICQ   Вверх
denks
Дата 24.7.2006, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот определение пути к TEMP
Код

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 
PM MAIL   Вверх
iskatel2
Дата 25.12.2008, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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;) программа работает корректно.

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

Код

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
PM MAIL ICQ   Вверх
Akella
Дата 25.12.2008, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 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
PM MAIL   Вверх
CodeMonkey
Дата 25.12.2008, 21:43 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код
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;





--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


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

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


 




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


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.