Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2013.10.27;
Скачать: [xml.tar.bz2];

Вниз

Windows 7 + сохранение в %TEMP%   Найти похожие ветки 

 
pushkin42 ©   (2010-03-06 23:18) [0]

Здравствуйте, уважаемые господа программисты!

У меня тут вопросик возник:

Я пишу код:

 try
     GetEnvironmentVariable("TEMP", FOutDir, 256);
   RetrieveFN :
     GetTempFileName(FOutDir, "sxs", 256, FOutFile);
     while FileExists(FOutFile) do
       goto RetrieveFN;
     ZBDFileName := StrPas(FOutFile);
     ZBDTemporary := True;
   finally
     FreeMem(FOutDir);
     FreeMem(FOutFile);
   end;


отрабатывает нормально, возвращает путь вида %DISK%\Users\бла-бла\Local\...\Temp

пытаюсь потом записать туда файл и он не пишется в эту директорию!!! в любую другую - пишется, а в %TEMP% - нет! В чем могут быть грабли?

D2010, Windows 7 Ultimate x86
Название профиля на русском языке (если это имеет значение)
Возвращаемый функцией полный путь существует, запись из проводника в эту папку доступна.


 
DVM ©   (2010-03-06 23:23) [1]

%DISK%\Users\бла-бла\Local\...\Temp

этот путь надо сначала преобразовать в нормальный.

function ExpandEnvironment(const CmdLine: string): string;
var
 Buff: array[0..MAX_PATH - 1] of Char;
 Ret: DWORD;
begin
 Ret := ExpandEnvironmentStrings(PChar(CmdLine), Buff, MAX_PATH);
 if Ret = 0 then
   Result := CmdLine
 else
   SetString(Result, Buff, Ret);
end;


 
DVM ©   (2010-03-06 23:27) [2]

Хотя погоди, %DISK% - это ты сам подписал?


 
Игорь Шевченко ©   (2010-03-07 00:44) [3]

пишет

procedure TForm1.Button1Click(Sender: TObject);
var
 FileName: string;
begin
 FileName := GetEnvironmentVariable("TEMP")+"\foo.bar";
 Memo1.Lines.SaveToFile(FileName);
end;


Windows 7, D2010


 
Германн ©   (2010-03-07 01:15) [4]


> Я пишу код:
>
>  try
>      GetEnvironmentVariable("TEMP", FOutDir, 256);
>    RetrieveFN :
>      GetTempFileName(FOutDir, "sxs", 256, FOutFile);
>      while FileExists(FOutFile) do
>        goto RetrieveFN;
>      ZBDFileName := StrPas(FOutFile);
>      ZBDTemporary := True;
>    finally
>      FreeMem(FOutDir);
>      FreeMem(FOutFile);
>    end;
>

Вот оно зло goto! :)


 
Игорь Шевченко ©   (2010-03-07 02:39) [5]


>    RetrieveFN :
>      GetTempFileName(FOutDir, "sxs", 256, FOutFile);
>      while FileExists(FOutFile) do
>        goto RetrieveFN;


Круто

Изучай конструкцию

repeat..until


 
Германн ©   (2010-03-07 03:01) [6]


> Игорь Шевченко ©   (07.03.10 02:39) [5]

Автору это не поможет. :)


 
pushkin42 ©   (2010-03-07 09:58) [7]

> Игорь Шевченко ©   (07.03.10 02:39) [5]
Ну не надо, не надо :)

Вот смотрите: http://img19.imageshack.us/img19/5232/bug001.png
Путь выводится правильно!

А вот почему после этого туда ничего не пишется - вот вопрос...
Может быть, UAC виноват?


 
pushkin42 ©   (2010-03-07 10:00) [8]

И да, имеет ли значение, что данный код выполняется в контексте RunDLL?


 
pushkin42 ©   (2010-03-07 10:16) [9]

Add: Пишет из программы в любой из вышестоящих каталогов (tempfile001.tmp к примеру пишет), temp/file001.tmp - не пишет....


 
Игорь Шевченко ©   (2010-03-07 13:23) [10]


> А вот почему после этого туда ничего не пишется - вот вопрос.
> ..


Потому что тебе хочется потрепаться. Если бы тебе была нужна помощь, ты бы давно уже показал ошибку, возникающую при записи.
А пустой треп ради привлечения внимания к своей персоне приведет к тому, что ветка будет закрыта.


 
pushkin42 ©   (2010-03-07 19:16) [11]

Спасибо за помощь.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2013.10.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.002 c
15-1368563403
Юрий
2013-05-15 00:30
2013.10.27
С днем рождения ! 15 мая 2013 среда


2-1359720812
salexn_123
2013-02-01 16:13
2013.10.27
Компиляция из командной строки


15-1368390603
Юрий
2013-05-13 00:30
2013.10.27
С днем рождения ! 13 мая 2013 понедельник


2-1359822748
alexdn
2013-02-02 20:32
2013.10.27
Параллельные процессы?


15-1368785148
Дмитрий С
2013-05-17 14:05
2013.10.27
Продление SSL сертификата веб-сервера.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский