c # вызвать Win32 API для длинных путей к файлам? - PullRequest
1 голос
/ 08 августа 2009

Как мне вызвать Win32 API для длинных путей к файлам, единственное, что я хочу сделать, - это получить список всех файлов в этом каталоге (рекурсивно)

1 Ответ

1 голос
/ 08 августа 2009

Если вы хотите использовать вызовы Win32, вам сначала нужно будет использовать DllImport для импорта ядра, синтаксис примерно такой, и вы должны делать это для каждого метода, который вы хотите использовать (это все не проверенное код, который описывает только концепцию), пример кода преобразует ваши пути в пути UNC, чтобы вы могли иметь длинные пути к файлам:

    using Microsoft.Win32.SafeHandles;
    ...
    [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
            static extern SafeHandleMinusOneIsInvalid FindFirstFileW(string lpFileName, IntPtr lpFindFileData);

    ...

            public String FindFirstFile(string filepath)
            {
                // If file path is disk file path then prepend it with \\?\
                // if file path is UNC prepend it with \\?\UNC\ and remove \\ prefix in unc path.
                if (filepath.StartsWith(@"\\"))
                    filepath = @"\\?\UNC\" + filepath.Substring(2, filepath.Length - 2);
                else
                    filepath = @"\\?\" + filepath;
...
                SafeHandleMinusOneIsInvalid ret = FindFirstFileW(filepath, lpFindFileData);
...
            }

После вызова FindFirstFile необходимо вызвать FindNextFile для следующего файла в каталоге, а затем, наконец, FindClose; полный пример того, как вывести список файлов в каталоге, используя ядро ​​Win32, смотрите здесь

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