从Windows API使用CreateFile被拒绝访问

本文关键字:拒绝访问 CreateFile 使用 Windows API | 更新日期: 2023-09-27 18:03:00

最近我遇到了。net中文件/目录库中MAX_PATH的问题,所以我开始寻找替代方案。

我正试图从存储在数据库中的原始数据重建文件,到目前为止使用new FileStream("G:'Location'temp.txt", FileMode.Create)等都没有问题,但是我被要求改变重建文件的结构,从而遇到字符限制。

我尝试使用这里的例子,像这样:

SafeFileHandle fileHandle = CreateFile(strDirectory,
EFileAccess.GenericWrite, EFileShare.None, IntPtr.Zero,
ECreationDisposition.OpenAlways, 0, IntPtr.Zero);
int lastWin32Error = Marshal.GetLastWin32Error();
if (fileHandle.IsInvalid)
{
    throw new System.ComponentModel.Win32Exception(lastWin32Error);
}

其中strDirectory = "G:'Really'Long'Folder'Structure'Temp.txt"

然而,我得到一个"访问被拒绝"异常被抛出。我对目标文件夹有完整的读/写权限,所以我不确定问题是什么。

从Windows API使用CreateFile被拒绝访问

您必须使用字符串''?'作为路径的前缀,以便绕过MAX_PATH限制。这在CreateFile MSDN信息中有记录,其中声明:

在该函数的ANSI版本中,名称被限制为MAX_PATH字符。要将此限制扩展到32,767个宽字符,请调用该函数的Unicode版本并在路径前添加"''?'"。有关详细信息,请参见命名文件、路径和命名空间。