-
Здравствуйте, уважаемые господа программисты!
У меня тут вопросик возник:
Я пишу код: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
Название профиля на русском языке (если это имеет значение)
Возвращаемый функцией полный путь существует, запись из проводника в эту папку доступна. -
%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; -
Хотя погоди, %DISK% - это ты сам подписал?
-
Игорь Шевченко © (07.03.10 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 -
Германн © (07.03.10 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! :) -
Игорь Шевченко © (07.03.10 02:39) [5]
> RetrieveFN :
> GetTempFileName(FOutDir, 'sxs', 256, FOutFile);
> while FileExists(FOutFile) do
> goto RetrieveFN;
Круто
Изучай конструкцию
repeat..until -
Германн © (07.03.10 03:01) [6]
> Игорь Шевченко © (07.03.10 02:39) [5]
Автору это не поможет. :) -
> Игорь Шевченко © (07.03.10 02:39) [5]
Ну не надо, не надо :)
Вот смотрите: http://img19.imageshack.us/img19/5232/bug001.png
Путь выводится правильно!
А вот почему после этого туда ничего не пишется - вот вопрос...
Может быть, UAC виноват? -
И да, имеет ли значение, что данный код выполняется в контексте RunDLL?
-
Add: Пишет из программы в любой из вышестоящих каталогов (tempfile001.tmp к примеру пишет), temp/file001.tmp - не пишет....
-
Игорь Шевченко © (07.03.10 13:23) [10]
> А вот почему после этого туда ничего не пишется - вот вопрос.
> ..
Потому что тебе хочется потрепаться. Если бы тебе была нужна помощь, ты бы давно уже показал ошибку, возникающую при записи.
А пустой треп ради привлечения внимания к своей персоне приведет к тому, что ветка будет закрыта. -
Спасибо за помощь.