為什麼OneDrive不支持路徑長度大於255字元的文件同步?

lz最近準備棄用dropbox換用onedrive做個人數據云備份。在把數據移動到onedrive文件夾的時候,提示我文件名過長,無法同步。上網搜索了一下,發現onedrive只能同步路徑長度小於255的文件。但是由於在電腦上經常做開發並且把各種文檔文件分類的比較詳細方便查找,不少地方文件路徑都很長,尤其是一些web project和java project。

lz覺得非常失望,在微軟解決這個問題之前只好繼續忍受dropbox有限的空間。這個問題已經存在很久了,技術上微軟應該也沒問題,但是微軟一直沒解決。這是為什麼?


基本上是個 windows 上面用 C++ 寫的程序都(幾乎)沒法處理超過 260 個位元組的路徑。(除非他們用 UNC)

而且因為 MAX_PATH 是個宏,所以操作系統是不能解除限制的——否則 99.999% 的 C++ 程序都會緩衝區溢出掛掉。

(.net 就沒這個問題,corefx 修了就修了,所以 C# 大法好)


其實我還是挺不能理解的,你就算是Java,在import裡面寫了一個一百多個字元的package的名字不會覺得很長嗎……


跑個題,買了家庭版感覺有點中槍...同步時不時出問題。

ios app上傳本機照片經常停住顯示「正在查找設置」,現在電腦上下載同步文件又卡住,一直顯示下載速度為0。同一台機另一個賬號又沒問題,確定已排除路徑過長因素,至於為啥至今沒搞懂。郵件反饋永遠就是要你重置或重裝。

心都快涼了半截


排名第一的答案,你難道不知道NTFS支持長度達到32767個字元的擴展路徑么?

The Windows API has many functions that also have Unicode versions to permit an extended-length path for a maximum total path length of 32,767 characters. This type of path is composed of components separated by backslashes, each up to the value returned in the lpMaximumComponentLength parameter of theGetVolumeInformation function (this value is commonly 255 characters). To specify an extended-length path, use the "\?" prefix. For example, "\?D:very long path".

Note The maximum path of 32,767 characters is approximate, because the "\?" prefix may be expanded to a longer string by the system at run time, and this expansion applies to the total length.

https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx

搞Windows開發沒事就把MSDN的文檔拿出來背一背

當然了 實際項目中很少有公司會去做這個兼容,不過不代表沒有。


Windows操作系統的限制。255是字元長度,不是位元組長度,所以如果是中文名的話,可以超過255位元組。如果是Linux,那就只有255個位元組了……


萬惡的MAX_PATH


項目源碼用 Git 等版本管理工具管理就行了,不要把 Dropbox啊OneDrive 當作版本控制工具。記得在 .gitignore 文件中忽略掉 node_modules 。這才是解決問題的正確方法。即使NTFS支持長度達到32767個字元的擴展路徑,在Node.js NPM面前也是杯水車薪。


嗚嗚。。我也想知道為啥onedrive(其他的好像也有大小限制)單個文件最大支持10G。。。我還想用它備份個虛擬機。


這是Windows系統的問題。有一次npm安裝某個module的時候,各種依賴很多,路徑很深了。然後這個文件夾刪都刪不掉了。刪掉的時候報錯。。於是一層層進文件夾,名字全部改成1,一直改了5、6個,然後才刪除。。。具體沒數上限是多少,反正是有上限的


遇到同樣的問題,是由於java項目中的文件造成的,一旦出現問題,所有同步都會停止,比較麻煩。官方給出的解決方法列到了下面。目前只能先刪除這些文件,解決同步問題,然後把java項目文件同步到百度雲里了。期待微軟以後能夠解決。

文件路徑

文件路徑的示例 - C:Users&PicturesSaved2014JanuaryHolidayNewYearsFamily 完整路徑(包含文件名)必須少於 255 個字元。 在 OneDrive 中縮短文件或子文件夾的名稱,或選擇更接近頂層文件夾的子文件夾。 修正這些問題後,若要再次開始同步,請:

  1. 轉到「文件資源管理器」

  2. 右鍵單擊「OneDrive」文件夾

  3. 單擊「同步」

更多同步問題可見:Fix OneDrive sync problems with Windows 8.1 or Windows RT 8.1


說明資料庫以明文存儲路徑,類型為varchar(255)


推薦閱讀:

不花錢的情況下,如何獲得更多的OneDrive空間?
求科普onedrive的各種方便的用法?
如何看待微軟將ONEDRIVE的存儲空間縮減至5GB?
OneDrive同步過程中產生副本文件?
為什麼 SkyDrive 不支持 Windows XP?

TAG:微軟Microsoft | 雲存儲 | OneDrive |