是否有针对不同System.IO API“S”的Kernel32 API

时间:2010-11-11 08:15:46

标签: c# .net

在我的应用程序中,我们要求我们必须在深度超过256个字符的情况下执行System.IO操作,在这种情况下,所有System.IO API都失败了。我们正在使用以下API。

  • System.IO.Path.Combine()
  • System.IO.Path.GetDirectoryName()
  • System.IO.Path.GetFileName()
  • System.IO.Path.GetPathRoot()
  • System.IO.Directory.Exists()
  • System.IO.Directory.GetFiles()
  • System.IO.Directory.GetDirectories()
  • System.IO.Directory.CreateDirectory()

请指导我,如果上述API的替代品可用超过256个字符,

谢谢

3 个答案:

答案 0 :(得分:3)

BCL团队博客上有关于漫长路径的精彩系列:

它充斥着如何使用Win32 API处理长文件名的示例,以及对可能遇到的问题和陷阱的大量解释。一个例子是DeleteFile API:

// Taken from "Part 2" of the BCL Team Blog
using System;
using System.Runtime.InteropServices;

[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool DeleteFile(string lpFileName);

public static void Delete(string fileName) 
{
    string formattedName = @"\\?\" + fileName;
    DeleteFile(formattedName);
}

答案 1 :(得分:0)

PI Invoke。但你可能不想使用它。 UHTTP://www.pinvoke.net/default.aspx/kernel32.CreateDirectoryEx

答案 2 :(得分:0)

如果您使用Unicode版GetFullPathName,则最多支持32,767个字符。

与可用于创建目录的CreateFile函数相同。

所以我建议只找到合适的函数File Management Functions,然后确保你使用的是Unicode版本。

例如,FindFirstFile可以取代我认为的Exists。并将其与FindNextFile结合使用,以获得GetFilesGetDirectories

的功能

您可能找不到Combine的替代品,因为我认为这是.Net特定帮助,但另一方面,您应该能够轻松编写自己的替代品。