Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 长度超过260个字符的Windows路径_C#_Path - Fatal编程技术网

C# 长度超过260个字符的Windows路径

C# 长度超过260个字符的Windows路径,c#,path,C#,Path,我需要复制路径长度大于260个字符的文件 如果我理解正确,File.Copy不允许这样做。我必须使用Win32.CopyFile并在路径之前添加\\?\ 但是如果我试图访问\\?\my\u server\my\u path\my\u file,我会得到错误0x03(找不到路径)。但是,浏览器中的相同链接可以正常工作 文件存储在DFS文件结构中。重要吗 string src = @"\\?\my_server\my_folder\my_file.ext"; if (Kernel32.CopyF

我需要复制路径长度大于260个字符的文件

如果我理解正确,
File.Copy
不允许这样做。我必须使用
Win32.CopyFile
并在路径之前添加
\\?\

但是如果我试图访问
\\?\my\u server\my\u path\my\u 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:

“\\?\”前缀也可用于根据通用命名约定(UNC)构造的路径。要使用UNC指定这样的路径,请使用“\\?\UNC\”前缀。例如,“\\?\UNC\server\share”,其中“server”是计算机的名称,“share”是共享文件夹的名称

在上面的示例中,您可能希望:

string src=@“\\?\UNC\my\u server\my\u folder\my\u file.ext”