从 C 中的路径名中提取基本路径

2023-11-21

Question

如何从 C 中的路径名中提取基本路径?

C 语言或 C 运行时库中是否有内置函数可以从 C 中的路径名中提取基本路径?

我问的基本上是相反的this问题。

注意:我更喜欢跨平台解决方案,但我在 Windows 中工作,因此如果有 Windows API 调用可以执行此操作,我仍然想知道。

Examples

Input              | Output
---------------------------------
C:\path\to\file   -> C:\path\to\
C:\path\to\file.c -> C:\path\to\
C:\file           -> C:\
.\file            -> .\
.\                -> .\
\                 -> \

参考

  • 使用 MSVS2005 从 C 中的完整路径中提取文件名

在 Windows 上有_splitpath.

Example

#include <Windows.h>
#include <tchar.h>

// Use your own error codes here
#define SUCCESS                     0L
#define FAILURE_NULL_ARGUMENT       1L
#define FAILURE_API_CALL            2L
#define FAILURE_INSUFFICIENT_BUFFER 3L

DWORD GetBasePathFromPathName( LPCTSTR szPathName,
                               LPTSTR  szBasePath,
                               DWORD   dwBasePathSize )
{
  TCHAR   szDrive[_MAX_DRIVE] = { 0 };
  TCHAR   szDir[_MAX_DIR]     = { 0 };
  TCHAR   szFname[_MAX_FNAME] = { 0 };
  TCHAR   szExt[_MAX_EXT]     = { 0 };
  size_t  PathLength;
  DWORD   dwReturnCode;

  // Parameter validation
  if( szPathName == NULL || szBasePath == NULL )
  {
    return FAILURE_NULL_ARGUMENT;
  }

  // Split the path into it's components
  dwReturnCode = _tsplitpath_s( szPathName, szDrive, _MAX_DRIVE, szDir, _MAX_DIR, szFname, _MAX_FNAME, szExt, _MAX_EXT );
  if( dwReturnCode != 0 )
  {
    _ftprintf( stderr, TEXT("Error splitting path. _tsplitpath_s returned %d.\n"), dwReturnCode );
    return FAILURE_API_CALL;
  }

  // Check that the provided buffer is large enough to store the results and a terminal null character
  PathLength = _tcslen( szDrive ) + _tcslen( szDir );
  if( ( PathLength + sizeof( TCHAR ) ) > dwBasePathSize )
  {
    _ftprintf( stderr, TEXT("Insufficient buffer. Required %d. Provided: %d\n"), PathLength, dwBasePathSize );
    return FAILURE_INSUFFICIENT_BUFFER;
  }

  // Copy the szDrive and szDir into the provide buffer to form the basepath
  if( ( dwReturnCode = _tcscpy_s( szBasePath, dwBasePathSize, szDrive ) ) != 0 )
  {
    _ftprintf( stderr, TEXT("Error copying string. _tcscpy_s returned %d\n"), dwReturnCode );
    return FAILURE_API_CALL;
  }
  if( ( dwReturnCode = _tcscat_s( szBasePath, dwBasePathSize, szDir ) ) != 0 )
  {
    _ftprintf( stderr, TEXT("Error copying string. _tcscat_s returned %d\n"), dwReturnCode );
    return FAILURE_API_CALL;
  }
  return SUCCESS;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 C 中的路径名中提取基本路径 的相关文章

  • 对静态成员变量的未定义引用

    我有一个有静态成员的类 它也是我的程序中其他几个类的基类 这是它的头文件 ifndef YARL OBJECT HPP define YARL OBJECT HPP namespace yarlObject class YarlObject
  • 如何动态加载包含非托管代码的原始程序集?(绕过“无法验证的代码失败策略检查”异常)

    我将举一个使用的例子系统 Data SQLite DLL http sqlite phxsoftware com 这是一个包含非托管代码的混合程序集 如果我执行这个 var assembly Assembly LoadFrom System
  • 如何使用 ILoggerFactory 记录 Polly 的重试

    或者 如何从静态方法记录 From https github com App vNext Polly https github com App vNext Polly你有这样的例子 其中记录器神奇地可用 Policy Timeout 30
  • 使用预编译头减少 clang 编译时间

    我正在开发一个数据库项目 该项目将查询 以某种高级语言表示 编译为 C 代码 这段代码由数据库编译并执行 那部分工作得很好 现在 我正在尝试减少 C 查询代码的编译时间 我想知道是否可以使用预编译头来提高性能 该查询被转换为一个名为 Que
  • 将 Python 控制台集成到 GUI C++ 应用程序中

    I m going to add a python console widget into a C GUI below some other controls 许多类将暴露给 python 代码 包括一些对 GUI 的访问 也许我会考虑 P
  • StreamReader,C#,peek

    我有一个 StreamReader 它偶尔会检查它是否有更多内容可以从简单的文本文件中读取 它使用 peek 属性 问题是 当我使用 peek 时 位置发生了变化 尽管不应该发生 FileStream m fsReader new File
  • 有没有办法将 boost::json::serializer 切换为美化输出?

    Using boost json serializer如中的示例所示文档 快速查看 http vinniefalco github io doc json json usage quick look html以紧凑格式保存 json tre
  • 使用 size_t 值反向遍历向量

    我想以相反的方向遍历向量的值 如您所知 向量的大小为 size t 当我使用以下代码时 for size t r m size 1 r gt 0 r x r f r for size t c r 1 c lt m size c x r m
  • 在 C++ 中使用表达式模板进行符号微分

    如何在 C 中使用表达式模板实现符号微分 一般来说 您需要一种表示符号的方法 即编码的表达式模板 例如3 x x 42 以及一个可以计算导数的元函数 希望您对 C 中的元编程足够熟悉 知道这意味着什么和需要什么 但可以给您一个想法 This
  • Qt QML 数据模型似乎不适用于 C++

    我一直在使用中的示例http doc qt digia com 4 7 qdeclarativemodels html http doc qt digia com 4 7 qdeclarativemodels html这是 QML 声明性数
  • 如何强制用户仅使用“new”创建从我派生的类的对象?

    为了实现引用计数 我们使用IUnknown http msdn microsoft com en us library ms680509 VS 85 aspx类接口和智能指针模板类 该接口具有所有引用计数方法的实现 包括Release vo
  • 拒绝访问特定目录中的特定文件类型

    对于某些应用程序 用户可以上传自己的文件 由于这可能是非常大的文件 因此他们可以通过自己的 FTP 客户端上传这些文件 当然 我不希望他们上传一些可以访问服务器上所有其他文件的 PHP 文件 我想要防止这种行为的方法之一是拒绝仅访问这些文件
  • 使用 QGraphicsScene 实现流畅的动画

    我希望我的问题并不总是同样的问题 我有一个 QGraphicsScene 它的项目是一些 QGraphicsPixmap 我用一个计时器来移动它们 每秒 SetX 10 我设置 10是因为窗口大100 使用这个解决方案我的动画不流畅 我想我
  • 将一个整数从 C 客户端发送到 Java 服务器

    我使用此代码将一个整数从我的 Java 客户端发送到我的 Java 服务器 int n rand nextInt 50 1 DataOutputStream dos new DataOutputStream socket getOutput
  • printf() 使用字符串表“解码器环”调试库

    我写这封信是想看看你们中是否有人见过或听说过我即将描述的想法的实现 我有兴趣为嵌入式目标开发 printf 风格的调试库 目标非常遥远 并且我和目标之间的通信带宽预算非常紧张 因此我希望能够以非常有效的格式获取调试消息 通常 调试语句如下所
  • 该组件没有由 uri 标识的资源

    我想创建一个通用数据网格以在我的所有视图 用户控件上使用 这是我的结构 Class Library called Core Class called ViewBase public class ViewBase UserControl pu
  • 为什么我不能对普通变量进行多态?

    我是一名Java程序员 最近开始学习C 我对某事感到困惑 据我了解 在 C 中 要实现多态行为 您必须使用指针或引用 例如 考虑一个类Shape与实施的方法getArea 它有几个子类 每个子类都以不同的方式重写 getArea 然后考虑以
  • 字符串 c 的二叉树

    我正在尝试实现一个能够在 c 中保存字符串的二叉树 在让代码适用于整数之后 我尝试稍微修改它以处理字符数组 现在我似乎完全破解了代码 但不知道如何破解 任何帮助表示赞赏 include
  • 未找到 _sqlite3_open 等符号错误

    您好 我收到此错误 Undefined symbols sqlite3 open referenced from main in ccRlWVer o sqliite3 close referenced from main in ccRlW
  • OpenGL 计算着色器调用

    我有一个与新计算着色器相关的问题 我目前正在研究粒子系统 我将所有粒子存储在着色器存储缓冲区中 以便在计算着色器中访问它们 然后我派遣一个一维工作组 define WORK GROUP SIZE 128 shaderManager gt u

随机推荐

  • Android:检测 USB

    有什么方法可以 以编程方式 在您的活动 应用程序中知道用户已通过 USB 将您的手机连接到 PC 有些人建议使用UMS CONNECTED从最新版本的 Android 开始已弃用 另一个问题是它不适用于支持 MTP 的设备 其他人建议使用B
  • 错误消息“您无法登录此应用程序,因为它不符合 Google 的 OAuth 2.0 政策以确保应用程序安全”

    我正在开发一个基于网络的应用程序 它允许我信任的员工编辑我的 YouTube 频道的标题 描述 标签等 在尝试 选择加入 我自己的应用程序时 我被发送到回调 URI 并附带一条错误消息 您无法登录此应用 因为它不符合 Google 保护应用
  • C++ 中使用向下取整、向上取整和向外舍入模式进行整数除法

    最近 我看到这个问题它询问如何将整数除以ceil舍入 朝正无穷大 不幸的是 答案要么不适用于有符号整数 要么存在下溢和溢出问题 例如 接受的答案有这个解决方案 q 1 x 1 y When x为零 则存在下溢 0结果是不正确的 你如何实施c
  • Google 地理编码 v2 API 突然停止工作

    地理编码 v2 API 意外停止 e g 我无法从 API 获取经纬度 服务器的输出是 Status code 610 request geocode 我搜索了status 610但找不到任何相关信息 Thanks 服务已停止 今天是 3
  • IIS 中的匿名访问和 NTLM 身份验证

    我有一台使用 IIS 设置的服务器 并且我的站点有一些允许匿名访问的页面和一些需要 集成 Windows 身份验证 的页面 在 IIS 的 身份验证方法 屏幕上 您似乎可以同时启用 集成 Windows 身份验证 和匿名访问 但我读过的文档
  • Fieldset:中心图例

    正如之前多次询问的那样 但从未真正回答过 我想将图例放在字段集中 这个技巧在这里完美完成 我也为我的项目购买了它 http themeforest net item aloma liquid mobile template full scr
  • 使用 PostgreSQL 和 REF_CURSOR 的 JPA 2.1 StoredProcedureQuery

    我在 PostgreSQL 数据库中创建了一个函数 我想使用 JPA 2 1 的 StoredProcedureQuery 方法调用该函数 这是我的 PostgreSQL 查询 CREATE OR REPLACE FUNCTION get
  • 如何重命名路径以响应填充

    我有一个这样的查询 galleryModel find id galleryId populate model User path objectId select firstName lastName 结束响应objectId会是这样的 o
  • C++ 约束应该急切地评估还是惰性地评估?

    这个问题的主要目的是引起社区对 libstdc 范围不适用于 clang 的关注 https bugs llvm org show bug cgi id 46746 Avi Kivity 认为这是一个 gcc 错误 https gcc gn
  • 如何在 Scala 中定义保留前导标记的三元运算符?

    我正在编写一个生成 Scala 输出的代码生成器 我需要以这样的方式模拟三元运算符 即导致 的标记保持不变 例如转换表达式c p q to c something 简单的if c p else q不符合我的标准 因为它需要if before
  • jQuery.data 不再适用于窗口?

    我最近升级了我们项目的 jQuery 文件1 4 2 to 1 4 4看来截至1 4 3我们一直在使用的方式jQuery data已停止工作 我们有这样的代码 var events window data events if events
  • 命名空间/解决方案结构

    我很抱歉问了这样一个笼统的问题 但这对我来说可能是一个挑战 我的团队即将开始一个大型项目 该项目有望将多年来不断发展的所有随机一次性代码库整合在一起 鉴于该项目将涵盖整个公司的标准化逻辑实体 客户 员工 小任务 控制小任务的大任务以及公用事
  • AutoMapper 映射中的 foreach 中的额外迭代

    由于某种原因 我在 AutoMapper 地图定义中使用的循环迭代次数超出了应有的次数 地图定义 Mapper CreateMap
  • 如何使JScrollPane(在BorderLayout中,包含JPanel)平滑自动滚动

    我试图在 JScrollPanel 内有一个不同大小的 JPanel 可能比标准屏幕宽得多 目前效果很好 我已经将滚动条配置为手动正常工作 但是我希望 JPanel 不断向左 滚动 以便随着时间的推移显示整个内容 我找到的所有答案都特定于
  • vim 无法将 映射到 :tab next

    我的 vimrc 中有以下映射 map
  • 防止 LaunchedEffect 在配置更改时重新运行

    我只想在加载可组合项时运行代码一次 因此 我使用 LaunchedEffect 并将 key 设置为 true 来实现此目的 LaunchedEffect true do API call 该代码工作正常 但每当有任何配置更改 例如屏幕旋转
  • 从专业化自我的类别继承?

    这是有效的 C 吗 template
  • 如何使用 Python 检索给定用户的所有推文和属性?

    我正在尝试从 Twitter 检索数据 使用 Tweepy 作为在命令行输入的用户名 我想提取大量有关状态和用户的数据 因此提出了以下内容 请注意 我正在导入所有必需的模块 并且具有 oauth 键 只是未包含在此处 并且文件名是正确的 只
  • 跨虚拟环境使用不同版本的相同库

    我正在开发一个 python 项目 该项目在多个模块中具有依赖关系 举个例子说我的主模块使用另外 2 个模块 即module 1需要图书馆lib version 1 5 and module 2它使用相同的Library but versi
  • 从 C 中的路径名中提取基本路径

    Question 如何从 C 中的路径名中提取基本路径 C 语言或 C 运行时库中是否有内置函数可以从 C 中的路径名中提取基本路径 我问的基本上是相反的this问题 注意 我更喜欢跨平台解决方案 但我在 Windows 中工作 因此如果有