Форум: "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