需要使用win32 api在c#中复制文件-我该怎么做?

需要使用win32 api在c#中复制文件-我该怎么做?,c#,.net,winapi,C#,.net,Winapi,我正在尝试复制一些文件,有时名称的长度会超过System.IO.File.copy方法可以接受的长度(根据抛出的异常为260个字符) 根据我所做的研究,我应该能够将win32 api的文件方法与\?\前置到路径一起使用,以获得32000个字符的限制,但我不确定需要导入哪些方法 有人能帮我吗?我在寻找这样的东西(显然是一个不同的函数,但你明白了): 尝试使用 关于PInvoke语法,您可以查看。感谢您将我的帖子标记为答案。我已经添加了它,以获得我更喜欢的P/Invoke样式的更多信息(提供了最大设

我正在尝试复制一些文件,有时名称的长度会超过System.IO.File.copy方法可以接受的长度(根据抛出的异常为260个字符)

根据我所做的研究,我应该能够将win32 api的文件方法与\?\前置到路径一起使用,以获得32000个字符的限制,但我不确定需要导入哪些方法

有人能帮我吗?我在寻找这样的东西(显然是一个不同的函数,但你明白了):

尝试使用


关于PInvoke语法,您可以查看。

感谢您将我的帖子标记为答案。我已经添加了它,以获得我更喜欢的P/Invoke样式的更多信息(提供了最大设置),我认为您应该使用LPWStr作为文件名,看看这是如何成为Unicode API的?对于我来说,它不适用于LPStr和长文件名,但适用于宽字符串。
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
    static extern SafeFileHandle CreateFileW(string lpFileName, uint dwDesiredAccess,
                                          uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition,
                                          uint dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("kernel32.dll",
           CharSet = CharSet.Unicode,
           CallingConvention = CallingConvention.StdCall,
           SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool CopyFile(
                   [MarshalAs(UnmanagedType.LPWStr)] string lpExistingFileName,
                   [MarshalAs(UnmanagedType.LPWStr)] string lpNewFileName,
                   [MarshalAs(UnmanagedType.Bool)] bool bFailIfExists);