Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/26: Рейтинг темы: голосов - 26, средняя оценка - 4.65
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30

Создание временного файла

06.03.2011, 17:47. Показов 4833. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Требуется создать временный файл. Хотелось бы какими-нибудь борландовскими функциями. Есть, например, creattemp, но фактически это низкоуровневая функция, работающая с char'ами, а не с AnsiString'ами. К тому же надо самому подавать путь до каталога, где можно создавать временные файлы. Наверняка уже имеются интерфейсы, отвечающие за путь, где можно создавать временные файлы (для каждого пользователя в системе имеется tmp-каталог). Возможно, что и есть интерфейсы, которые сразу же создают файл там где надо. Конкретно в моём случае я буду писать в файл через TFileStream. Заодно узнать бы, каким интерфейсом его удалять. Я удаляю через unlink, но это всё-таки unix'овый интерфейс (или POSIX'ный), а наверняка есть борландовский
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.03.2011, 17:47
Ответы с готовыми решениями:

Создание временного уникального файла
Помогите пожалуйста, нужно создать временный файл с уникальным именем, я знаю что это делается с помощью tmpfile вот так: $temp =...

Создание временного пользователя
Возникла такая задача, работаю в техникуме, есть доменный пользователь Student под которым работают студенты на своих ПК, но студенты...

Настроить VS на создание временного проекта
Всем привет, может кто подскажет как настроить VS на создание временного проекта (как в предыдущих версиях) вместо указания пути для...

3
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
06.03.2011, 18:38
Определение пути к Windows Desktop и другим специальным каталогам
Используйте API функцию SHGetSpecialFolder. SHGetSpecialFolder определена в SHLOBJ.H. Эта функция позволяет Вам отыскивать pidl для различных каталогов в оболочке, типа рабочего стола Windows, стартового каталога, и папки Мои Документы. Как только Вы получите pidl, Вы сможете преобразовать pidl в строку пути через API-функцию SHGetPathFromIDList.
SHGetSpecialFolder имеет три параметра. Первый параметр - HWND, который определяет окно владельца для любых диалоговых окон или окон сообщения, которые могли бы появиться в течение вызова(я не уверен, почему диалоговое окно появилось бы). Второй параметр - целочисленный идентификатор, который определяет, какую папку Вы пробуете найти.

Возможные значения:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CSIDL_BITBUCKET Recycle bin
CSIDL_CONTROLS Control Panel
CSIDL_DESKTOP Windows desktop
CSIDL_DESKTOPDIRECTORY Directory for the desktop
CSIDL_DRIVES My Computer
CSIDL_FONTS Fonts directory
CSIDL_NETHOOD Network Neighborhood
CSIDL_NETWORK Network Neighborhood virtual folder
CSIDL_PERSONAL My Documents
CSIDL_PRINTERS Printers
CSIDL_PROGRAMS Program groups
CSIDL_RECENT Most recent documents list
CSIDL_SENDTO Send To menu items
CSIDL_STARTMENU Taskbar Start menu items
CSIDL_STARTUP Startup directory
CSIDL_TEMPLATES Document templates
Последний параметр - адрес pidl. SHGetSpecialFolderLocation пишет результат pidl по этому адресу. Пример кода ниже демонстрирует, как использовать SHGetSpecialFolderLocation.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#define NO_WIN32_LEAN_AND_MEAN
#include <SHLOBJ.H> // разместить выше всего в Unit1.cpp
//----------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  LPITEMIDLIST  pidl;
  LPMALLOC pShellMalloc;
  char szDir[MAX_PATH];
  // SHGetSpecialFolderLocation генерирует PIDL. Память для PIDL
  // распределяет оболочка shell, и должна быть освобождена, 
  // используя указатель памяти оболочки COM-объекта
  // Используем SHGetMalloc, чтобы отыскать объект malloc
  if(SUCCEEDED(SHGetMalloc(&pShellMalloc))) {
    // если все прошло успешно, продолжим
    // получив pidl для рабочего стола ( windows desktop)
     if(SUCCEEDED(SHGetSpecialFolderLocation(NULL,
                        CSIDL_DESKTOPDIRECTORY,
                        &pidl))) {
      // в случае успеха функция вернет  true 
       if(SHGetPathFromIDList(pidl, szDir)) {
        // путь к папке поместим в Label1->Caption
        Label1->Caption = szDir;
      }
      pShellMalloc->Free(pidl);
    }
    pShellMalloc->Release();
  }
}
может, для новых версий системы есть и новые значения.
А чем отличается "временный" файл от обычного?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
06.03.2011, 22:32  [ТС]
А вот для всей такой длинной кишки есть что-то накрытое борландовским интерфейсом?

Цитата Сообщение от LK Посмотреть сообщение
А чем отличается "временный" файл от обычного?
Временный файл создаётся в специально отведённом каталоге. В юниксах этот каталог при каждой загрузке чистится, а потому если программа фатально умерла, то она не засирает файловую систему неудалёнными файлами. В виндах такой каталог попадает под чистку мусора. Программу, например, можно запускать с read-only диска или что-то типа того, и чтобы не мучаться и не искать, где можно файл создать, можно просто tmp-каталогом воспользоваться. В юниксах есть вообще интерфейсы типа mkstemp, которые сразу тебе выдают дескриптор файла и при закрытии файла или завершении процесса любым способом файл удаляется автоматически
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
06.03.2011, 22:42
Временные каталоги
c:\Windows\Temp\
c:\Users\User\AppData\Local\Temp\
относительно всего остального - есть хорошее правили подметать за собой самостоятельно
FILE_ATTRIBUTE_TEMPORARY 256 0x0100
A file that is being used for temporary storage. File systems avoid writing data back to mass storage if sufficient cache memory is available, because typically, an application deletes a temporary file after the handle is closed. In that scenario, the system can entirely avoid writing the data. Otherwise, the data is written after the handle is closed.
http://msdn.microsoft.com/en-u... 85%29.aspx
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.03.2011, 22:42
Помогаю со студенческими работами здесь

Создание временного сервера на своем пк
Можно ли написать программу, которая в момент запуска или соединения с другим клиентом будет создавать временный сервер на ПК для передачи...

Создание временного диска в оперативной памяти
Здравствуйте, коллеги. Вопрос на засыпку: возможно ли средствами VB.NET создать временный диск / каталог в оперативке? Что...

Использование временного файла. Ошибка!
Что здесь делаю не так? Нужно, чтобы прога убирала табуляцию и сохраняла в том же файле, из которого взяла текст. FILE *in,*tmp; ...

Обновление Nod32 (ошибка создания временного файла)
Уважаемые форумчане! Помогите пожалуйста в таком вопросе: При обновлении Nod32 выдает сообщение об ошибке создания временного файла ...

Генерация имени временного файла в заданном каталоге
Для реализации сабжа есть функция _tempnam. Но вот проблема - имя там генерируется в зависимости от переменной окружения TMP, т.е. далеко...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru