小编Cha*_*ald的帖子

GetFullPathNameW和长Windows文件路径

在我当前个人项目的Windows版本中,我希望支持扩展长度的文件路径.因此,我对如何使用GetFullPathNameW API来解析长文件路径的全名感到困惑.

根据MSDN(关于lpFileName参数):

在此函数的ANSI版本中,名称仅限于MAX_PATH字符.要将此限制扩展为32,767个宽字符,请调用该函数的Unicode版本并在路径前添加"\?\".有关更多信息,请参阅命名文件.

如果我正确理解这一点,为了使用扩展长度的文件路径GetFullPathNameW,我需要指定一个\\?\附加前缀的路径.由于\\?\前缀仅在卷字母或UNC路径之前有效,这意味着API无法用于解析相对于当前目录的路径的全名.

如果是这种情况,我是否可以使用另一个API来解析文件路径的全名,..\somedir\somefile.txt如果结果名称的长度超过MAX_PATH?如果没有,我是否能够GetCurrentDirectory与相对文件路径(\\?\C:\my\cwd\..\somedir\somefile.txt)结合并使用它GetFullPathNameW,或者我需要自己处理所有文件路径解析?

c++ windows winapi ntfs

7
推荐指数
1
解决办法
2382
查看次数

使用struct作为python ctypes模块的函数参数

所以我试图将用于处理Windows上的连接/符号链接/等的python C扩展程序移植到使用ctypes模块的纯Python.不幸的是,由于我之前使用的ctypes非常有限,我想我可能会在某处导致我的代码无法正常运行时出错.这是我到目前为止所拥有的:

from os import path
from ctypes import *
from ctypes.wintypes import *

# Python implementation of:
#
# typedef struct {
#       DWORD   ReparseTag;
#       DWORD   ReparseDataLength;
#       WORD    Reserved;
#       WORD    ReparseTargetLength;
#       WORD    ReparseTargetMaximumLength;
#       WORD    Reserved1;
#       WCHAR   ReparseTarget[1];
# } REPARSE_MOUNTPOINT_DATA_BUFFER, *PREPARSE_MOUNTPOINT_DATA_BUFFER;

class ReparsePoint(Structure):
    _fields_ = [
        ("ReparseTag", DWORD),
        ("ReparseDataLength", DWORD),
        ("Reserved", WORD),

        ("ReparseTargetLength", WORD),
        ("ReparseTargetMaximumLength", WORD),
        ("Reserved1", WORD),
        ("ReparseTarget", c_wchar_p),
    ]

GENERIC_READ = 0x80000000
GENERIC_WRITE = 0x40000000

FILE_SHARE_DELETE = 0x00000004
FILE_SHARE_READ = 0x00000001 …
Run Code Online (Sandbox Code Playgroud)

python winapi ctypes

5
推荐指数
1
解决办法
1600
查看次数

Lazarus IDE中多个编译器的全局管理

我一直在搜索Lazarus IDE文档,但到目前为止只发现了与交叉编译相关的信息,所以我希望有人能给我一个直接的答案.我目前正在开发一个需要编译32位Windows和64位Windows的项目.另外,我已经设置了Free Pascal编译器的两个版本.Lazarus是否具有用于在两个编译器中进行配置的任何内置功能,然后使用适当的编译器基于构建目标?理想情况下,这将在全局级别完成,以便配置在项目中保持不变,但如果只能在项目级别完成,我不介意这样做.

delphi pascal lazarus

5
推荐指数
1
解决办法
173
查看次数

标签 统计

winapi ×2

c++ ×1

ctypes ×1

delphi ×1

lazarus ×1

ntfs ×1

pascal ×1

python ×1

windows ×1