Нужно использовать Win32 API для копирования файлов в C # - как мне это сделать? - PullRequest
3 голосов
/ 31 марта 2009

Я пытаюсь скопировать некоторые файлы, и иногда длина имен превышает длину, которую может принять метод System.IO.File.Copy (260 символов в зависимости от создаваемого исключения)

Согласно проведенному мною исследованию, я должен иметь возможность использовать файловые методы win32 api в сочетании с \? \ Prepended к путям, чтобы получить ограничение в 32 000 символов, но я не уверен, какие методы мне нужны импорт.

Может ли кто-нибудь помочь мне с этим? Я ищу что-то вроде (очевидно, другая функция, но вы поняли):

[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);

Ответы [ 2 ]

5 голосов
/ 31 марта 2009
[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);

http://www.pinvoke.net/default.aspx/kernel32/CopyFile.html

1 голос
/ 31 марта 2009

Попробуйте использовать CopyFile .

Для синтаксиса PInvoke вы можете проверить pinvoke.net .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...