C语言函数大全-- _w 开头的函数(1)

news2024/11/24 18:30:38

C语言函数大全

本篇介绍C语言函数大全-- _w 开头的函数

1. _waccess

1.1 函数说明

函数声明函数功能
int _waccess(const wchar_t* path, int mode);用于测试文件或目录是否存在,并检查程序是否具有对它们的访问权限

参数:

  • path : 待测试的文件名或目录名的宽字符字符串
  • mode : 一个位掩码,用于指示要测试的访问权限;常见的访问权限如下:
    • R_OK:可读取权限
    • W_OK:可写入权限
    • X_OK:可执行权限
    • F_OK:存在性检查权限

1.2 演示示例

#include <stdio.h>
#include <io.h>

int main() 
{
    // 测试文件是否存在
    const wchar_t* filename = L"test.txt";
    // 第二个参数 mode = 0,表示不指定任何访问权限 
    if (_waccess(filename, 0) != 0) 
    {
        fprintf(stderr, "File does not exist.\n");
        return 1;
    }

    printf("File exists.\n");

    return 0;
}

在上述的示例代码中,我们使用 _waccess() 函数测试文件是否存在。如果文件不存在,则输出一个错误信息并返回 1;否则输出一个成功信息并返回 0

注意: 第二个参数设置为 0,表示不指定任何访问权限。

如果要测试一个文件是否存在并且具有可读取和可写入权限,可以将第二个参数设置为 R_OK | W_OK,如下所示:

_waccess("filename", R_OK | W_OK);

1.3 运行结果

在这里插入图片描述

2. _wasctime

2.1 函数说明

函数声明函数功能
wchar_t* _wasctime(const struct tm* timeptr);用于将 tm 结构体类型的时间转换为字符串

参数:

  • timeptr : 要转换为字符串的 tm 结构体类型变量

2.2 演示示例

#include <stdio.h>
#include <time.h>
#include <wchar.h>

int main() 
{
    // 获取当前时间
    time_t now = time(NULL);
    struct tm* ptm = localtime(&now);

    // 将时间转换为字符串
    wchar_t* str = _wasctime(ptm);

    // 输出结果:类似 Mon May 15 15:10:55 2023\n
    wprintf(L"%ls", str);

    return 0;
}

在上面的示例代码中,

  • 首先,我们使用 time() 函数获取当前时间;
  • 接着,使用 localtime() 函数将其转换为本地时间;
  • 然后,使用 _wasctime() 函数将转换后的时间格式化为一个字符串;
  • 最后,输出转换后的时间字符串。

2.3 运行结果

在这里插入图片描述

3. _wasctime_s

3.1 函数说明

函数声明函数功能
errno_t _wasctime_s(wchar_t* buffer, size_t bufsz, const struct tm* timeptr);用于将 tm 结构体类型的时间转换为字符串

参数:

  • buffer : 指向一个 wchar_t 类型的缓冲区,该缓冲区存储函数将时间格式化后的结果
  • bufsz : 缓冲区的大小,以字节为单位
  • timeptr : 一个指向 tm 结构体的指针,其中包含要转换为字符串的时间信息

3.2 演示示例

#include <stdio.h>
#include <time.h>
#include <wchar.h>

int main() 
{
    // 获取当前时间
    time_t now = time(NULL);
    struct tm* ptm = localtime(&now);

    // 创建目标缓冲区
    wchar_t buffer[32];

    // 将时间转换为字符串
    errno_t err = _wasctime_s(buffer, sizeof(buffer), ptm);

    // 检查转换是否成功
    if (err == 0) 
    {
        // 输出结果:类似 Sun May 15 12:34:56 2023\n
        wprintf(L"%ls", buffer);
    } 
    else 
    {
        // 输出错误信息
        fprintf(stderr, "Error converting time to string. Error code: %d\n", err);
    }

    return 0;
}

在上面的示例代码中,

  • 首先,我们使用 time() 函数获取当前时间;
  • 接着,使用 localtime() 函数将其转换为本地时间;
  • 然后,创建一个目标缓冲区,并使用 _wasctime_s() 函数将转换后的时间格式化为一个字符串;
  • 最后,输出转换后的时间字符串。

3.3 运行结果

在这里插入图片描述

4. _wchdir

4.1 函数说明

函数声明函数功能
int _wchdir(const wchar_t* path);用于更改当前工作目录

参数:

  • path: 新工作目录路径的宽字符字符串

4.2 演示示例

#include <stdio.h>
#include <direct.h>

#define MAX_PATH 200

int main() 
{
    // 输出当前工作目录
    wchar_t buffer[MAX_PATH];
    _wgetcwd(buffer, MAX_PATH);
    wprintf(L"Current working directory: %ls\n", buffer);

    // 更改当前工作目录
    const wchar_t* new_dir = L"C:\\Windows\\system32";
    if (_wchdir(new_dir) == 0) 
        wprintf(L"Changed working directory to: %ls\n", new_dir);
    else 
        fprintf(stderr, "Error changing working directory.\n");

    return 0;
}

在上面的示例代码中,

  • 首先,我们使用 _wgetcwd() 函数获取当前工作目录;
  • 接着,调用 wprintf() 函数将当前工作目录输出到控制台;
  • 然后,使用 _wchdir() 函数将当前工作目录更改为 C:\Windows\system32
  • 最后,将更改的目录输出到控制台中。

4.3 运行结果

在这里插入图片描述

5. _wchmod

5.1 函数说明

函数声明函数功能
int _wchmod(const wchar_t* path, int mode);用于更改指定文件的访问权限

参数:

  • path : 一个指向 wchar_t 类型的字符串,表示要更改权限的文件路径
  • mode : 新的访问权限模式,可以是以下常量之一或其组合:
    • _S_IREAD:所有用户可读取文件
    • _S_IWRITE:所有用户可写入文件
    • _S_IEXEC:所有用户可执行文件
    • _S_IRUSR:文件所有者可读取文件
    • _S_IWUSR:文件所有者可写入文件
    • _S_IXUSR:文件所有者可执行文件
    • _S_IRGRP:文件组成员可读取文件
    • _S_IWGRP:文件组成员可写入文件
    • _S_IXGRP:文件组成员可执行文件
    • _S_IROTH:其他用户可读取文件
    • _S_IWOTH:其他用户可写入文件
    • _S_IXOTH:其他用户可执行文件

5.2 演示示例

#include <sys/stat.h>
#include <stdio.h>
#include <io.h>

int main() 
{
    // 更改文件的访问权限
    const wchar_t* filename = L"test.txt";
    int result = _wchmod(filename, _S_IREAD | _S_IWRITE);

    if (result) {
        fprintf(stderr, "Error changing file permission.\n");
        return 1;
    }

    printf("File permission changed successfully.\n");

    return 0;
}

5.3 运行结果

在这里插入图片描述

6. _wcreat

6.1 函数说明

函数声明函数功能
int _wcreat(const wchar_t* path, int mode);用于创建一个新文件,并返回一个文件指针

参数:

  • path : 一个指向 wchar_t 类型的字符串,表示要创建的文件路径名
  • mode : 要打开文件的方式,可以是以下常量之一或其组合:
    • _S_IREAD:所有用户可读取文件
    • _S_IWRITE:所有用户可写入文件
    • _S_IEXEC:所有用户可执行文件
    • _S_IRUSR:文件所有者可读取文件
    • _S_IWUSR:文件所有者可写入文件
    • _S_IXUSR:文件所有者可执行文件
    • _S_IRGRP:文件组成员可读取文件
    • _S_IWGRP:文件组成员可写入文件
    • _S_IXGRP:文件组成员可执行文件
    • _S_IROTH:其他用户可读取文件
    • _S_IWOTH:其他用户可写入文件
    • _S_IXOTH:其他用户可执行文件

注意: mode 参数中的这些常量可以用位运算符 | 进行组合,以指定文件的不同访问权限。

6.2 演示示例

#include <sys/stat.h>
#include <fcntl.h>
#include <io.h>
#include <stdio.h>
#include <wchar.h>

int main() 
{
    // 打开新创建的文件
    const wchar_t* filename = L"example.txt";
    int file_handle = _wcreat(filename, _S_IWRITE);

    if (file_handle == -1) 
    {
        fprintf(stderr, "Error creating file.\n");
        return 1;
    }

    // 写入数据到文件
    const wchar_t* message = L"Hello, huazie!\n";
    const size_t num_bytes = wcslen(message) * sizeof(wchar_t);
    const ssize_t bytes_written = _write(file_handle, message, num_bytes);

    if (bytes_written == -1) 
    {
        fprintf(stderr, "Error writing to file.\n");
        return 1;
    }

    // 输出结果
    wprintf(L"%zd bytes written to file.\n", bytes_written);

    // 关闭文件句柄
    _close(file_handle);

    return 0;
}

在上述的示例代码中,

  • 首先,我们使用 _wcreat() 函数创建一个名为 "example.txt" 的新文本文件,并将其存储在当前目录中;
  • 接着,定义一个宽字符指针 message,其值为"Hello, huazie!\n",同时使用了 wcslen() 函数来计算字符串的长度,并乘以 sizeof(wchar_t) 来计算实际的字节数
  • 然后,调用 _write() 函数将数据以字节形式写入先前创建的 "example.txt" 文件。根据返回值 bytes_written ,检查是否成功。如果函数执行成功,则输出写入的字节数;否则输出一个错误信息。
  • 最后,关闭文件句柄,结束程序。

注意:_write() 函数是 Windows 平台和 Linux 平台均可用的函数,但在使用时需要注意不同平台上换行符的差异。在 Windows 平台上,文本文件中的换行符是 "\r\n",而在 Linux 平台上则是 "\n"

6.3 运行结果

在这里插入图片描述

在这里插入图片描述

7. _wcserror

7.1 函数说明

函数声明函数功能
wchar_t* _wcserror(int errnum);用于将系统错误代码(例如通过 _wopen()_wsopen()_wexec() 等函数返回的错误代码)转换为对应的错误消息字符串

参数:

  • errnum : 要转换的错误代码。如果传递 0,则函数返回一个表示 “no error” 的字符串

7.2 演示示例

#include <fcntl.h>
#include <io.h>
#include <stdio.h>
#include <errno.h>
#include <wchar.h>

int main() 
{
    // 尝试打开不存在的文件
    const wchar_t* filename = L"nonexistent.txt";
    int file_handle = _wopen(filename, _O_RDONLY);

    if (file_handle == -1) 
    {
        // 获取最后发生的系统错误代码
        const int error_code = errno;

        // 将错误代码转换为错误消息字符串
        const wchar_t* error_message = _wcserror(error_code);

        // 输出错误消息字符串
        fwprintf(stderr, L"Error opening file: %s\n", error_message);
        return 1;
    }

    // 因为文件不存在,所以走不到这里
    printf("File opened successfully.\n");

    // 关闭文件句柄
    _close(file_handle);

    return 0;
}

在上述的示例代码中,

  • 首先,我们使用 _wopen() 函数尝试打开一个不存在的文件。
  • 接着,如果函数执行失败,则获取最后发生的系统错误代码 errno
  • 然后,使用 _wcserror() 函数将其转换为对应的错误消息字符串。
  • 最后,使用 fwprintf() 函数输出错误消息字符串并返回 1,结束程序;

7.3 运行结果

在这里插入图片描述

8. _wctime

8.1 函数说明

函数声明函数功能
wchar_t* _wctime(const time_t* _Time);用于将时间转换为可读格式的、宽字符字符串

参数:

  • _Time : 要转换为可读格式字符串的时间值,通常使用 time() 函数获取当前时间值

8.2 演示示例

#include <stdio.h>
#include <time.h>

int main() 
{
    // 获取当前时间
    const time_t now = time(NULL);

    // 将时间转换为可读格式字符串
    wchar_t* str_time = _wctime(&now);

    // 输出当前时间的字符串
    wprintf(L"The current date and time is: %s", asctime(localtime(&now)));
    wprintf(L"_wctime() output: %ls", str_time);

    return 0;
}

8.3 运行结果

在这里插入图片描述

9. _wfullpath

9.1 函数说明

函数声明函数功能
wchar_t *_wfullpath(wchar_t *absPath, const wchar_t *relPath, size_t maxLength);用于将相对路径转换为绝对路径

参数:

  • absPath : 用于存储返回结果的缓冲区指针
  • relPath : 待转换的相对路径字符串
  • maxLength : 缓冲区最大长度

返回值:

  • 如果转换成功,则返回转换后的绝对路径;
  • 如果发生错误,则返回 NULL

9.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>

int main() 
{
    // 相对路径
    const wchar_t* rel_path = L"../test/file.txt";

    // 分配缓冲区空间
    wchar_t abs_path[1024];

    // 将相对路径转换为绝对路径
    if (_wfullpath(abs_path, rel_path, sizeof(abs_path) / sizeof(wchar_t)) != NULL) 
    {
        wprintf(L"Absolute path: %ls\n", abs_path);
    } 
    else 
    {
        printf("Error converting relative path to absolute path.\n");
        return 1;
    }

    return 0;
}

9.3 运行结果

在这里插入图片描述

10. _wmakepath

10.1 函数说明

函数声明函数功能
void _wmakepath(wchar_t* path, const wchar_t* drive, const wchar_t* dir, const wchar_t* fname, const wchar_t* ext);用于将文件路径的各个部分(驱动器、目录、文件名和扩展名)组合成完整路径

参数:

  • path : 指向存储生成的完整文件路径字符串的缓冲区的指针
  • drive : 指定驱动器的字符串,例如 "C:"。如果不需要指定驱动器,则将此参数设置为 NULL
  • dir : 指定目录路径的字符串,以反斜杠 (\) 结尾。可以使用正斜杠 (/) 作为替代字符。如果不需要指定目录路径,则将此参数设置为 NULL
  • fname : 指定文件名的字符串(不包括扩展名)。如果不需要指定文件名,则将此参数设置为 NULL
  • ext : 指定文件扩展名的字符串,包括点 (.)。如果不需要指定文件扩展名,则将此参数设置为 NULL

10.2 演示示例

#include <stdio.h>
#include <wchar.h>

#define MAX_PATH 300

int main() 
{
    // 定义文件路径各部分
    const wchar_t* drive = L"E:";
    const wchar_t* dir = L"\\Software\\C\\Demo\\C";
    const wchar_t* fname = L"Test2";
    const wchar_t* ext = L".exe";

    // 分配缓冲区空间并组合路径
    wchar_t path[MAX_PATH];
    // 将文件路径的各个部分(驱动器、目录、文件名和扩展名)组合成完整路径
    _wmakepath(path, drive, dir, fname, ext);

    // 输组合后的路径
    wprintf(L"Path: %ls\n", path);

    return 0;
}

10.3 运行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/529903.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Elasticsearch(三)

Elasticsearch(三) 数据聚合 聚合的分类 文档&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html 聚合可以实现对文档数据的统计、分析、运算。聚合常见的有三类&#xff1a; 桶聚合&#xff1a;用来对文档做分组 Te…

【P22】JMeter 调试后置处理程序(Debug PostProcessor)

&#xff08;1&#xff09;、测试计划右键 <<< 添加 <<< 线程&#xff08;用户&#xff09;<<< 线程组 默认参数即可 &#xff08;2&#xff09;、线程组右键 <<< 添加 <<< 取样器 <<< 调试取样器 默认参数即可 &…

SQL复习(一)——安装

1 mysql卸载 reference&#xff1a;https://blog.csdn.net/m0_67392273/article/details/126066580 Step1:停止MySql服务 在卸载之前&#xff0c;先停止MySQL8.0的服务 搜索“服务”&#xff0c;找到“MySQL”&#xff0c;右键点击选择“停止” Step2&#xff1a;软件的卸…

Unittest自动化测试之unittestunittest_生成测试报告

unittest_生成测试报告 测试报告为测试结果的统计即展示&#xff0c;是自动化测试不可或缺的一部分&#xff0c;利用unittest 可以生成测试报告 方式一、使用第三方 HTMLTestRunner 执行测试用例集&#xff0c;生成网页版测试报告&#xff08;推荐&#xff09; HTMLTestRunn…

5年软测经验去面试25k测试岗,看到这样的面试题我还是心虚了....

我是着急忙慌的准备简历——5年软件测试经验&#xff0c;可独立测试大型产品项目&#xff0c;熟悉项目测试流程...薪资要求&#xff1f;5年测试经验起码能要个25K吧 我加班肝了一页半简历&#xff0c;投出去一周&#xff0c;面试电话倒是不少&#xff0c;自信满满去面试&#…

系统掌握入河排污口设置论证技术、方法及报告编制框架

在短时间内较系统的掌握入河排污口设置论证技术、方法及报告编制框架&#xff0c;学习内容以城镇生活污水厂、造纸项目、石化项目、制药项目案例为线索&#xff0c;系统讲解入河排污口设置论证报告书编制过程&#xff0c;并以水质模型为手段&#xff0c;讲解水质影响预测模型的…

Voice Control for ChatGPT 沉浸式的与ChatGPT进行交流学习。

Voice Control for ChatGPT 日常生活中&#xff0c;我们与亲人朋友沟通交流一般都是喜欢语音的形式来完成的&#xff0c;毕竟相对于文字来说语音就不会显的那么的苍白无力&#xff0c;同时最大的好处就是能解放我们的双手吧&#xff0c;能更快实现两者间的对话&#xff0c;沟通…

华为OD机试真题 Java 实现【简单的自动曝光】【2023Q1 100分】

一、题目描述 一个图像有 n 个像素点&#xff0c;存储在一个长度为 n 的数组 img 里&#xff0c;每个像素点的取值范围[0,255]的正整数。 请你给图像每个像素点值加上一个整k(可以是负数)&#xff0c;得到新图 newlmg&#xff0c;使得新图 newlmg 的所有像素平均值最接近中位…

响应式设计和移动端优化:如何实现页面在不同设备上的适配和优化

章节一&#xff1a;介绍响应式设计和移动端优化 响应式设计是一种使网页能够自适应不同设备和屏幕尺寸的设计方法。它通过使用流式网格布局、媒体查询和弹性图片等技术&#xff0c;使得网页能够在不同分辨率和设备上呈现出最佳的布局和用户体验。 移动端优化则是针对移动设备…

青训营 x 训练营结营测试题目(前端方向)

文章目录 &#x1f4cb;前言&#x1f3af;选择题&#xff08;含多选&#xff09;&#x1f4dd;最后 &#x1f4cb;前言 这篇文章的内容是23年6月青训营 x 训练营结营题目&#xff0c;题目一共有25题&#xff0c;题目类型为选择题&#xff0c;包括了单选题和多选题&#xff0c;…

WiFi(Wireless Fidelity)基础(十二)

目录 一、基本介绍&#xff08;Introduction&#xff09; 二、进化发展&#xff08;Evolution&#xff09; 三、PHY帧&#xff08;&#xff08;PHY Frame &#xff09; 四、MAC帧&#xff08;MAC Frame &#xff09; 五、协议&#xff08;Protocol&#xff09; 六、安全&#x…

VHDL直流电机模糊控制器的设计与实现

在直流电机控制策略方面,属于智能控制理论的模糊控制其突出优点在于它不依赖于被控对象的模型,因此本设计尝试将模糊控制理论应用于直流电机转速控制,并将模糊控制器实现于FPGA(Field Programmable Gate Array)芯片上。在实现方法上本设计采用模糊查表控制法实现模糊控制器…

【C++】-static在类和对象中的作用和细节(下)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树 ❤️‍&#x1fa79;作者宣言&#xff1a;认真写好每一篇博客 &#x1f4a8;作者gitee:gitee &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 文章目录 前言 前言 今天我们来讲一个static对类的对象的作用…

安全基础第十二天:nginx相关配置和nginx-host绕过

目录 一、nginx的动静分离 1.动静分离的原理 2.动静分离实验&#xff08;centos做为放置静态资源的服务器&#xff0c;ubuntu做为请求的web服务器&#xff09; &#xff08;1&#xff09;在centos的/usr/local/nginx/html下创建一个静态文件static &#xff08;2&#xff09…

目标检测概述

传统目标检测 任务目标 从图像中找出相应的物体位置 目标检测的核心目的在于&#xff0c;估计出目标在图像中的坐标。 问题定义 目标检测的结果是什么&#xff1f; 预测出目标在图像中的位置。 位置如何表示&#xff1f; 通常采用水平矩形框的形式估计目标。 在opencv中…

为什么Java要求多用组合,少用继承?

前言&#xff1a; 最近有一个要好的朋友去阿里大厂面试Java高级工程师&#xff0c;在第二轮面试的过程中&#xff0c;面试官提了一个问题&#xff1a;“解释下Java项目中为什么要求多用组合&#xff0c;少用继承&#xff1f;”。朋友觉得这个题目既熟悉&#xff0c;又陌生&…

【LeetCode】504. 七进制数

504. 七进制数&#xff08;简单&#xff09; 方法一&#xff1a;七进制数预处理 思路 这里我利用了提示&#xff0c;得知 |num| < 10^7 &#xff0c;因此所使用到的七进制数肯定也小于等于 107 &#xff0c;我将 7 的次方数算出来&#xff0c;预存在数组 seven 中。 后续…

ADUC834BSZ-ASEMI代理亚德诺ADUC834BSZ原厂芯片

编辑-Z ADUC834BSZ特征&#xff1a; 2个独立ADC&#xff08;16位和24位分辨率&#xff09; 24位无缺失代码&#xff0c;主ADC 21位rms&#xff08;18.5位p-p&#xff09;有效分辨率20 Hz 偏移漂移10 nV/C&#xff0c;增益漂移0.5 ppm/C 62 KB片上闪存/EE程序存储器 4 KB…

C++(Qt)读取.mat文件(可以读取多级变量)

全网最全&#xff0c;从安装环境和配置环境变量&#xff08;配置环境变量是大坑&#xff09;&#xff0c;然后再到需要的SDK库&#xff0c;再到代码详细解读。 首先就是需要安装matlab&#xff0c;注意&#xff1a;你使用的编译器版本需要和MATLAB版本相互兼容&#xff01;&am…