Конференция "WinAPI" » Windows 7 + сохранение в %TEMP%
 
  • pushkin42 © (06.03.10 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 © (06.03.10 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 © (06.03.10 23:27) [2]
    Хотя погоди, %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]

    Автору это не поможет. :)
  • pushkin42 © (07.03.10 09:58) [7]
    > Игорь Шевченко ©   (07.03.10 02:39) [5]
    Ну не надо, не надо :)

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

    А вот почему после этого туда ничего не пишется - вот вопрос...
    Может быть, UAC виноват?
  • pushkin42 © (07.03.10 10:00) [8]
    И да, имеет ли значение, что данный код выполняется в контексте RunDLL?
  • pushkin42 © (07.03.10 10:16) [9]
    Add: Пишет из программы в любой из вышестоящих каталогов (tempfile001.tmp к примеру пишет), temp/file001.tmp - не пишет....
  • Игорь Шевченко © (07.03.10 13:23) [10]

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


    Потому что тебе хочется потрепаться. Если бы тебе была нужна помощь, ты бы давно уже показал ошибку, возникающую при записи.
    А пустой треп ради привлечения внимания к своей персоне приведет к тому, что ветка будет закрыта.
  • pushkin42 © (07.03.10 19:16) [11]
    Спасибо за помощь.
 
Конференция "WinAPI" » Windows 7 + сохранение в %TEMP%
Есть новые Нет новых   [134431   +16][b:0][p:0.001]