簡體   English   中英

Windows路徑的長度超過260個字符

[英]Windows path with a length of more than 260 characters

我需要復制路徑長度大於260個字符的文件。

如果我正確理解,則File.Copy不允許這樣做。 我必須使用Win32.CopyFile並在路徑之前添加\\\\?\\

但是,如果嘗試訪問\\\\?\\my_server\\my_path\\my_file ,則會收到錯誤0x03(找不到路徑)。 但是,資源管理器中的相同鏈接可以正常工作。

文件存儲在DFS文件結構中。 這非常重要嗎?

string src  = @"\\?\my_server\my_folder\my_file.ext";

if (Kernel32.CopyFile(src, f2c.getDest, true))
{
    Console.WriteLine("[SUCCESS] Copie du fichier {0} vers {1}", src, f2c.getDest);
    list_updSQL.Add(String.Format(@"UPDATE dbo.Fichier SET NOM_FICHIER_COPIE = '{0}' WHERE HASH_FICHIER ='{1}' ;", src, f2c.getHash));
}
else
{   
    Console.WriteLine("[FAILED][ERROR {0}] Copie du fichier {1} vers {2}", Kernel32.GetLastError().ToString(), src, f2c.getDest);
}

/* ----- */

[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
public static extern bool CopyFile(string lpExistingFileName, string lpNewFileName, bool bFailIfExists);

[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
public static extern UInt32 GetLastError();

您需要為UNC路徑指定正確的語法。

參見MSDN

從MSDN:

“ \\\\?\\”前綴也可以與根據通用命名約定(UNC)構造的路徑一起使用。 要使用UNC指定這樣的路徑,請使用“ \\\\?\\ UNC \\”前綴。 例如,“ \\\\?\\ UNC \\ server \\ share”,其中“ server”是計算機的名稱,“ share”是共享文件夾的名稱。

在上面的示例中,您可能需要:

string src = @"\\\\?\\UNC\\my_server\\my_folder\\my_file.ext";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM