none
получение короткого имени для папки Program Files RRS feed

  • Вопрос

  • В Windows7 возникли проблемы с получением короткого имени (в формате 8.3) для папки Program Files, а точнее именно для этой папки короткое имя не удается получить, со всеми остальными подкаталогами проблем не возникает.
    даже dir -x c:\ не выдает короткого имени.
    указание полного пути в кавычках проблемы не решает, make разбивает путь "c:\program files\....." на две части - с:\program и files\... (в коротких форматах) и соответственно ругается.
    если включить режим отладки у make и вручную выполнить сформированные команды, то они выполняются корректно.

    как в Windows7 получить короткое имя для program files?
    • Перемещено Siddharth Chavan 1 октября 2010 г. 19:57 MSDN Forums Consolidation (От:Общая Архитектура)
    22 октября 2009 г. 3:40

Ответы

Все ответы

  • Здравствуйте,

    А если не секрет, то зачем это нужно? Вообще "Progra~1" - вполне нормальное 8.3 имя для этой папки еще со времен Windows 95 ;)


    Program Manager, Microsoft Corporation
    • Предложено в качестве ответа Daniel Kornev 25 ноября 2009 г. 11:43
    25 ноября 2009 г. 11:43
  • добрый день.
    получить короткое имя "Progra~1" для папки "Program files" нужно потому, что ряд используемых утилит командной строки понимают пути только в формате 8.3.
    8 декабря 2009 г. 8:38
  • [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError=true)]
    static extern uint GetShortPathName(
       [MarshalAs(UnmanagedType.LPTStr)]
       string lpszLongPath,
       [MarshalAs(UnmanagedType.LPTStr)]
       StringBuilder lpszShortPath,
       uint cchBuffer);
    Взято с http://www.pinvoke.net/default.aspx/kernel32.GetShortPathName
    • Предложено в качестве ответа PashaPash 8 декабря 2009 г. 10:57
    • Помечено в качестве ответа Dmitry AndreevMicrosoft employee 17 декабря 2009 г. 6:55
    8 декабря 2009 г. 10:57
  • function GetShortPath(LongPath: WideString): WideString;
    var
      sPath,
      sResult: string;
    begin
      Result := '';
      sPath := LongPath;
      if DirectoryExists(sPath) then
      begin
        SetLength(sResult, MAX_PATH);
        GetShortPathName(PChar(sPath), PChar(sResult), MAX_PATH);
        SetLength(sResult, StrLen(PChar(sResult)));
        Result := sResult;
      end
    end;

    на Win7 для папки "c:\program files" возвращает "c:\program files"
    на XP, 2000 для папки "c:\program files" возвращает "c:\progra~1"

    10 декабря 2009 г. 4:10