討論區快速選單
知識庫快速選單
掌握Salesforce雲端管理秘訣 網路投保旅行平安險 程式設計俱樂部Facebook粉絲團
[ 回上頁 ] [ 討論區發言規則 ]
[Win]取得完整檔名最大長度
更改我的閱讀文章字型大小
作者 : cxxlman(CxxlMan) C++優秀好手貼文超過1000則
[ 貼文 1042 | 人氣 3227 | 評價 1260 | 評價/貼文 1.21 | 送出評價 28 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2019/6/29 下午 01:17:39
不管是用 GetVolumeInformation() 還是 MAX_PATH 都只有 260 顯然是不對
正解是什麼

#include <iostream>
#include <windows.h>

using namespace std;


string getcwd_string(void)
{
 // + 1 is for NULL
 char volumeName[MAX_PATH + 1] = { 0 };
 char fileSystemName[MAX_PATH + 1] = { 0 };
 DWORD serialNumber = 0;
 DWORD maxComponentLen = 0;
 DWORD fileSystemFlags = 0;

 DWORD MaxPathSize;

 if (GetVolumeInformationA(
  "//?/",
  volumeName,
  sizeof(volumeName),
  &serialNumber,
  &maxComponentLen,
  &fileSystemFlags,
  fileSystemName,
  sizeof(fileSystemName)) == true)
 {
  MaxPathSize = maxComponentLen;
 }
 else
 {
  MaxPathSize = MAX_PATH;
 }

 char *ExeFullNameA = new char[MAX_PATH];
 GetModuleFileNameA(nullptr, ExeFullNameA, MAX_PATH);

 string ExeFullName(ExeFullNameA);
 auto found = ExeFullName.rfind('\\');
 string ExePath(ExeFullName, 0, found);

 delete ExeFullNameA;
 return ExePath; // 主程式所在的絕對路錄徑
}

int main(int argc, char* argv[])
{
 cout << getcwd_string().c_str() << endl;
 cout << argv[0] << endl;

 cout << "Press <Enter> to end..." << endl;
 cin.get();
 return 0;
}

作者 : kagaya(kagaya) VC++優秀好手C++優秀好手貼文超過1000則人氣指數超過30000點
[ 貼文 1602 | 人氣 38709 | 評價 4610 | 評價/貼文 2.88 | 送出評價 115 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2019/7/1 上午 09:21:37
https://codingsimplifylife.blogspot.com/2017/05/windows-10260.html
作者 : cxxlman(CxxlMan) C++優秀好手貼文超過1000則
[ 貼文 1042 | 人氣 3227 | 評價 1260 | 評價/貼文 1.21 | 送出評價 28 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2019/7/1 上午 09:39:55
試過了 不行 只好直接用 32767 希望不要有事
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1595 | 人氣 138661 | 評價 2840 | 評價/貼文 1.78 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2019/7/30 下午 11:31:20
路徑+檔名最大長度260
記得是當初MS在制定NTFS的標準時訂下的
在Windows的SDK裡
就直接將MAX_PATH定義為260
如果你不想以後在複製檔案時出事的話
就別忽視這個規則
不然可能在你將檔案複製到別台時
檔名可能會被自動截斷

DOS時期
檔名長度都還限制在8.3耶
有些人為了回朔相容
至今仍遵守8.3的規則
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1595 | 人氣 138661 | 評價 2840 | 評價/貼文 1.78 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2019/7/30 下午 11:36:59
雖然MS聲稱在Windows 10上
移除路徑+檔名限制在260字元的限制
https://mspoweruser.com/ntfs-260-character-windows-10/

但似乎是這樣
The limite o FILE_NAME = 255 CHAR
PATH_NAME = 4096 CHAR
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1595 | 人氣 138661 | 評價 2840 | 評價/貼文 1.78 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2019/7/31 下午 02:54:52
雖然有人有解除Windows 10的260字元長度的方法
但是還是不建議你用
https://codingsimplifylife.blogspot.com/2017/05/windows-10260.html
作者 : cxxlman(CxxlMan) C++優秀好手貼文超過1000則
[ 貼文 1042 | 人氣 3227 | 評價 1260 | 評價/貼文 1.21 | 送出評價 28 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2019/8/1 上午 11:18:28

>雖然有人有解除Windows 10的260字元長度的方法

經實測,在 Win10,絕對路錄徑\主程式名 超過 260,就沒辦法開啟執行

>但是還是不建議你用
>https://codingsimplifylife.blogspot.com/2017/05/windows-10260.html

有改過後測試,一樣沒辦法開啟執行
作者 : cxxlman(CxxlMan) C++優秀好手貼文超過1000則
[ 貼文 1042 | 人氣 3227 | 評價 1260 | 評價/貼文 1.21 | 送出評價 28 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2019/8/1 下午 06:26:44
貼上程式碼給大家測試,多做幾層目錄試試吧

#include <string>
#include <iostream>
#include <windows.h>

using namespace std;

// 絕對路徑完整檔名的大小
#define MAX_FULLFILENAME 32767


string GetExeDir(void)
{
  string ExeFullNameA(MAX_FULLFILENAME, '\0');
  GetModuleFileNameA(nullptr, (char *)ExeFullNameA.c_str(), MAX_FULLFILENAME);

  auto found = ExeFullNameA.rfind('\\');

  return string(string(ExeFullNameA, 0, found)); // 主程式所在的絕對路徑
}


int main(int argc, char* argv[])
{
  cout << GetExeDir().c_str() << endl;
  cout << argv[0] << endl;

  cout << "Press <Enter> to end..." << endl;
  cin.get();
  return 0;
}

 板主 : simula
 > C++ - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - C++ - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
C++
1 Raymond 13050 
2 青衫 4760 
3 simula 4690 
4 coco 4030 
5 白老鼠(Gary) 3670 
6 ozzy 2540 
7 Ben 2250 
8 Anderson 1960 
9 windblown 1650 
10 Kenny 1560 
C++
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.15625