【OpenGL】二十四、OpenGL 纹理贴图 ( 读取文件内容 | 桌面程序添加控制台窗口 | ‘fopen‘: This function may be unsafe 错误处理 )(一)

简介: 【OpenGL】二十四、OpenGL 纹理贴图 ( 读取文件内容 | 桌面程序添加控制台窗口 | ‘fopen‘: This function may be unsafe 错误处理 )(一)

文章目录

一、文件读取

二、报错处理 ( 'fopen': This function or variable may be unsafe. )

三、桌面程序添加控制台窗口

四、相关资源





一、文件读取


使用 fopen 函数读取文件 , 然后将磁盘中的文件读取到内存中 ;


首先使用 fopen 函数打开文件 , 这里注意尽量使用绝对路径 , 在 Visual Studio 2019 中使用相对路径可能打开失败 ;


// 打开文件
  FILE* pFile = fopen(filePath, "rb");


然后使用 fseek 函数获取当前的文件大小 ;


// 判定文件大小, 将文件指针从 "尾部" 开始移动
  // 移动 0 个字节
  // 成功返回 0 , 失败返回非 0
  fseek(pFile, 0, SEEK_END);


最后调用 fread 函数将文件内容读取到数组中 ;


  // 读取 pFile 指针指向的内存中的数据

// 读取 pFile 指针指向的内存中的数据 
    // 读取的数据个数是 nLen 个 
    // 每个数据的大小是 sizeof(unsigned char) 字节 , 即 1 字节 
    // 将读取的数据存储到 fileContent 指向的内存中
    fread(fileContent, sizeof(unsigned char), nLen, pFile);

代码示例 :


#include "utils.h"
// 加载文件方法
unsigned char* LoadFileContent(const char* filePath)
{
  // 该指针指向的内存空间存储文件内容
  unsigned char* fileContent = nullptr;
  // 打开文件
  FILE* pFile = fopen(filePath, "rb"); 
  //printf("打开文件 pFile : %p", pFile);
  // 如果打开文件成功
  if (pFile)
  {
  // 判定文件大小, 将文件指针从 "尾部" 开始移动
  // 移动 0 个字节
  // 成功返回 0 , 失败返回非 0
  fseek(pFile, 0, SEEK_END);
  // 获取文件指针位置 , 当前文件指针位于文件尾部
  // 当前的文件指针位置就是文件的字节长度
  int nLen = ftell(pFile);
  // 如果文件长度大于 0 , 才去读取文件
  if (nLen > 0) 
  {
    // 将文件指针 FILE* pFile 移到文件的开始位置
    rewind(pFile);
    // 为文件内容分配一块内存空间 , 即创建一个 nLen + 1 字节的数组
    // 多出一个字节 , 在字节末尾添加一个 '\0'
    fileContent = new unsigned char[nLen + 1];
    // 读取 pFile 指针指向的内存中的数据 
    // 读取的数据个数是 nLen 个 
    // 每个数据的大小是 sizeof(unsigned char) 字节 , 即 1 字节 
    // 将读取的数据存储到 fileContent 指向的内存中
    fread(fileContent, sizeof(unsigned char), nLen, pFile);
    // 最后第 nLen + 1 个元素 , 索引是 nLen , 设置为 '\0'
    fileContent[nLen] = '\0';
  }
  // 关闭文件
  fclose(pFile);
  }
  return fileContent;
}



调用上述读取文件方法 , 并将读取的内容打印出来 :


// 读取文件内容
  // 绝对路径 : "D:\\002_Project\\006_Visual_Studio\\OpenGL\\OpenGL\\test.txt"
  // Visual Studio 2019 中使用相对路径读取不到文件
  char* str = (char*)LoadFileContent("D:\\002_Project\\006_Visual_Studio\\OpenGL\\OpenGL\\test.txt");
  printf("%s\n", str);


上述 “D:\002_Project\006_Visual_Studio\OpenGL\OpenGL\test.txt” 文件内容是 " Hello OpenGL "




image.png




二、报错处理 ( ‘fopen’: This function or variable may be unsafe. )


处理错误问题 :


1>------ 已启动生成: 项目: OpenGL, 配置: Debug Win32 ------
1>utils.cpp
1>D:\002_Project\006_Visual_Studio\OpenGL\OpenGL\OpenGL\utils.cpp(10,1): error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\stdio.h(208): message : 参见“fopen”的声明
1>已完成生成项目“OpenGL.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========


处理方案 : 命令行添加 " _CRT_SECURE_NO_WARNINGS " 宏 , 右键点击项目名称 , 选择属性 ,

image.png



选择 配置属性 / C/C++ / 命令行 , 设置如下宏 :


/D_CRT_SECURE_NO_WARNINGS


image.png


目录
相关文章
|
11月前
|
Linux 虚拟化 iOS开发
VMware Remote Console 13.0.1 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
VMware Remote Console 13.0.1 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
2147 0
VMware Remote Console 13.0.1 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
|
Linux 虚拟化 iOS开发
VMware Remote Console 13.0.0 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
VMware Remote Console 13.0.0 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
3596 1
VMware Remote Console 13.0.0 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
|
C++ Windows
【Function App】本地通过VS Code调试Function时候遇见无法加载文件错误Microsoft.Extensions.Diagnostics.Abstractions
在使用 VS Code 调试 Azure Functions 时,执行 `func host start` 可能因版本冲突报错。错误信息显示 Rpc Initialization Service 启动失败,可能是由于缺少文件或组件导致。解决方法包括:1) 使用 npm 卸载并重新安装 Azure Functions Core Tools;2) 若问题未解决,重新下载安装包(如 func-cli-x64.msi)修复旧版本工具;3) 退出并重启 VS Code,重新加载项目即可恢复正常运行。参考资料链接提供了更多背景信息。
583 1
|
中间件 Docker Python
【Azure Function】FTP上传了Python Function文件后,无法在门户页面加载函数的问题
通过FTP上传Python Function至Azure云后,出现函数列表无法加载的问题。经排查,发现是由于`requirements.txt`中的依赖包未被正确安装。解决方法为:在本地安装依赖包到`.python_packages/lib/site-packages`目录,再将该目录内容上传至云上的`wwwroot`目录,并重启应用。最终成功加载函数列表。
327 0
【Azure Function & Application Insights】调用Function上传和下载文件,有时候遇见大于1MB的文件的日志没有记录在Application Insights中
【Azure Function & Application Insights】调用Function上传和下载文件,有时候遇见大于1MB的文件的日志没有记录在Application Insights中
200 0
|
C语言 开发者
[笔记]音视频学习之OpenGL篇《一》创建窗口
[笔记]音视频学习之OpenGL篇《一》创建窗口
273 0
|
缓存 索引
OpenGL学习笔记(十三):将纹理贴图应用到四边形上,对VAO/VBO/EBO/纹理/着色器的使用方式进行总结
OpenGL学习笔记(十三):将纹理贴图应用到四边形上,对VAO/VBO/EBO/纹理/着色器的使用方式进行总结
OpenGL学习笔记(十三):将纹理贴图应用到四边形上,对VAO/VBO/EBO/纹理/着色器的使用方式进行总结
|
存储 BI
Opengl ES之纹理贴图
Opengl ES连载系列
358 0
|
Python
【错误记录】PyCharm 运行 Python 程序报错 ( PEP 8: E305 expected 2 blank lines after class or function definiti )
【错误记录】PyCharm 运行 Python 程序报错 ( PEP 8: E305 expected 2 blank lines after class or function definiti )
1195 0
【错误记录】PyCharm 运行 Python 程序报错 ( PEP 8: E305 expected 2 blank lines after class or function definiti )
|
Windows
【OpenGL】二十四、OpenGL 纹理贴图 ( 读取文件内容 | 桌面程序添加控制台窗口 | ‘fopen‘: This function may be unsafe 错误处理 )(二)
【OpenGL】二十四、OpenGL 纹理贴图 ( 读取文件内容 | 桌面程序添加控制台窗口 | ‘fopen‘: This function may be unsafe 错误处理 )(二)
315 0
【OpenGL】二十四、OpenGL 纹理贴图 ( 读取文件内容 | 桌面程序添加控制台窗口 | ‘fopen‘: This function may be unsafe 错误处理 )(二)