ExtractShortPathName - C++ Builder

C++ Builder 參考手冊(cè) ? System::Sysutils ? ExtractShortPathName


獲取路徑和文件名的 8.3 格式的短路徑和文件名

頭文件:#include <System.SysUtils.hpp>
命名空間:System::Sysutils
函數(shù)原型:

System::UnicodeString __fastcall ExtractShortPathName(const System::UnicodeString FileName);

參數(shù):

  • FileName 路徑和文件名;

返回值:

  • 8.3 格式的短文件名,如果 FileName 存在,只有 Windows 操作系統(tǒng)有短文件名;
  • 直接返回 FileName,如果 FileName 沒(méi)有短文件名;
  • 空字符串,如果 FileName 不存在。

  • 8.3 格式的文件名是古老的 DOS 文件名的標(biāo)準(zhǔn),文件名最長(zhǎng) 8 個(gè)字符,后綴最長(zhǎng) 3 個(gè)字符,文件名和后綴之間用點(diǎn)分隔,所以稱(chēng)為 "8.3" 格式;
  • 為了兼容古老的只識(shí)別 8.3 格式文件的軟件,Windows 操作系統(tǒng)給文件做了兼容,長(zhǎng)度超過(guò) 8.3 格式的文件,同時(shí)還有一個(gè) 8.3 格式的短文件名可以訪問(wèn)這個(gè)文件,這個(gè)函數(shù)是獲取這個(gè)兼容 8.3 格式的短文件名;
  • 不是所有的文件都有短文件名,在 Windows 10 / 11 操作系統(tǒng)上測(cè)試的結(jié)果是 C 盤(pán)上的文件有短文件名,D 盤(pán)上的文件沒(méi)有,如果把 D 盤(pán)的文件復(fù)制到 C 盤(pán),會(huì)有短文件名,再?gòu)?fù)制到 D 盤(pán)上就又沒(méi)有了:
    ? 例如測(cè)試程序 Sysutils_ExtractShortPathName.exe (本文后面的例子) 在 D 盤(pán)的文件夾
    D:\Hsuanlu\Programs\System.Sysutils\Functions\ExtractShortPathName\
    里面的時(shí)候,獲取的短文件名是這個(gè)文件名本身,沒(méi)有短文件名;
    ? 把 Sysutils_ExtractShortPathName.exe 復(fù)制到 C:\Program Files 里面,就能獲取到短文件名了,F(xiàn)ileName 是
    C:\Program Files\Hsuanlu\ExtractShortPathName\Sysutils_ExtractShortPathName.exe
    得到的短文件名是
    C:\PROGRA~1\Hsuanlu\EXTRAC~1\SYSUTI~1.EXE
    ? 又測(cè)試了在 C 盤(pán)根目錄創(chuàng)建一個(gè) Hsuanlu 文件夾,把測(cè)試程序復(fù)制到里面,F(xiàn)ileName 是
    C:\Hsuanlu\ExtractShortPathName\Sysutils_ExtractShortPathName.exe
    得到的短文件名是
    C:\Hsuanlu\EXTRAC~1\SYSUTI~1.EXE
    ? 而 C:\Hsuanlu\Test1 文件不存在,得到的短文件名是空字符串;
    ? 又測(cè)試了 C:\Program Files (x86)\Embarcadero\Studio 得到的短文件名是
    C:\PROGRA~2\EMBARC~1\Studio

例子:獲取應(yīng)用程序的路徑

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    UnicodeString s = Application->ExeName;
    Memo1->Lines->Add(s);
    Memo1->Lines->Add(Sysutils::ExtractShortPathName(s));

    s = L"C:\\Hsuanlu\\Test1";
    Memo1->Lines->Add(s);
    Memo1->Lines->Add(Sysutils::ExtractShortPathName(s));

    s =  L"C:\\Program Files (x86)\\Embarcadero\\Studio";
    Memo1->Lines->Add(s);
    Memo1->Lines->Add(Sysutils::ExtractShortPathName(s));
}

運(yùn)行結(jié)果:

運(yùn)行結(jié)果
運(yùn)行結(jié)果
運(yùn)行結(jié)果

相關(guān):


C++ Builder 參考手冊(cè) ? System::Sysutils ? ExtractShortPathName

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容