getLongPathNameTransactedA 函数 (winbase.h)
[Microsoft 强烈建议开发人员利用替代方法来实现应用程序的需求。 TxF 致力于实现的许多方案都可以通过更简单、更易用的技术来实现。 此外,TxF 在 Microsoft Windows 的将来版本中可能不可用。 有关详细信息,以及 TxF 的替代方法,请参阅事务性 NTFS 的替代方法。]
以事务处理操作的形式将指定路径转换为其长格式。
若要在没有事务的情况下执行此操作,请使用 GetLongPathName 函数。
有关文件和路径名称的详细信息,请参阅 命名文件、路径和命名空间。
语法
DWORD GetLongPathNameTransactedA(
[in] LPCSTR lpszShortPath,
[out] LPSTR lpszLongPath,
[in] DWORD cchBuffer,
[in] HANDLE hTransaction
);
参数
[in] lpszShortPath
要转换的路径。
默认情况下,名称限制为MAX_PATH个字符。 若要将此限制扩展到 32,767 个宽字符,请在路径前面添加“\\?\”。 有关详细信息,请参阅命名文件、路径和命名空间。
提示
从 Windows 10 版本 1607 开始,可以选择删除MAX_PATH限制,而无需在前面添加“\\?\”。 有关详细信息,请参阅 命名文件、路径和命名空间 的“最大路径长度限制”部分。
路径必须位于本地计算机上;否则,函数将失败,最后一个错误代码设置为 ERROR_TRANSACTIONS_UNSUPPORTED_REMOTE。
[out] lpszLongPath
指向用于接收长路径的缓冲区的指针。
可以使用用于 lpszShortPath 参数的同一缓冲区。
[in] cchBuffer
缓冲区 lpszLongPath 指向的大小,以 TCHAR为单位。
[in] hTransaction
事务的句柄。 此句柄由 CreateTransaction 函数返回。
返回值
如果函数成功,则返回值为复制到 lpszLongPath 的字符串的长度(以 TCHAR为单位),不包括终止 null 字符。
如果 lpBuffer 缓冲区太小而无法包含路径,则返回值是保存路径所需的缓冲区的大小(以 TCHAR为单位),以及终止 null 字符。
如果函数因任何其他原因(例如文件不存在)而失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。
注解
在许多文件系统上,短文件名包含波形符 (~) 字符。 但是,并非所有文件系统都遵循此约定。 因此,如果路径不包含波形符 (~) 字符,请不要假定可以跳过调用 GetLongPathNameTransacted 。
如果未找到长路径,此函数将返回在 lpszLongPath 参数的 lpszShortPath 参数中指定的名称。
如果返回值大于 cchBuffer 中指定的值,则可以使用足以保存路径的缓冲区再次调用函数。 有关这种情况的示例,请参阅 GetFullPathName 的示例代码部分。
在 Windows 8 和 Windows Server 2012 中,此函数由以下技术支持。
技术 | 支持 |
---|---|
服务器消息块 (SMB) 3.0 协议 | 否 |
SMB 3.0 透明故障转移 (TFO) | 否 |
具有横向扩展文件共享的 SMB 3.0 (SO) | 否 |
群集共享卷文件系统 (CSV) | 否 |
弹性文件系统 (ReFS) | 否 |
SMB 3.0 不支持 TxF。
注意
winbase.h 标头将 GetLongPathNameTransacted 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 [仅限桌面应用] |
目标平台 | Windows |
标头 | winbase.h (包括 Windows.h) |
Library | Kernel32.lib |
DLL | Kernel32.dll |