文章目录

  • 一、文件读取
  • 二、报错处理 ( 'fopen': This function or variable may be unsafe. )
  • 三、桌面程序添加控制台窗口
  • 四、相关资源

一、文件读取


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

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

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

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

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

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

         // 读取 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 , 失败返回非 0fseek(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 "

二、报错处理 ( ‘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 " 宏 , 右键点击项目名称 , 选择属性 ,

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

/D_CRT_SECURE_NO_WARNINGS

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


桌面程序添加控制台窗口 : 右键点击项目名称 , 选择 " 属性 " ;

在 " 配置属性 / 生成事件 / 生成后事件 " 中的 " 命令行 " 输入框中输入如下内容 ;

editbin /subsystem:console $(OutDir)$(ProjectName).exe

运行程序 : 成功读取到本目录下的 “test.txt” 文件 , 这里有个问题需要注意 , 在 Visual Studio 2019 中使用相对路径读取不到文件 , 必须使用绝对路径才可以 ;

 // 读取文件内容// 绝对路径 : "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);

四、相关资源


GitHub 地址 : https://github.com/han1202012/OpenGL
( GitHub 源码始终都会随着后续博客的进度更新覆盖 , 可能没有本博客的相关源码 , 推荐下载博客源码快照 ) ;

博客源码快照 : https://download.csdn.net/download/han1202012/14930175
( 该源码是 Windows 桌面程序 , 使用 Visual Studio 2019 打开 )

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

  1. 【OpenGL】笔记二十四、立方体贴图

    1. 流程 之前我们使用了不少2D形式的贴图,那么现在有没有其他类型的贴图呢?当然有,比如立方体贴图,它就是由6个2D贴图组合而成的: 那么为什么要把6张纹理合并到一张纹理中,而不是直接使用6个单独的 ...

  2. TensorFlow学习笔记(二十四)自制TFRecord数据集 读取、显示及代码详解

    在跑通了官网的mnist和cifar10数据之后,笔者尝试着制作自己的数据集,并保存,读入,显示. TensorFlow可以支持cifar10的数据格式, 也提供了标准的TFRecord 格式,而关于 ...

  3. 湖仓一体电商项目(二十四):合并Iceberg小文件

    文章目录 合并Iceberg小文件 合并Iceberg小文件 Iceberg表每次commit都会生成一个parquet数据文件,有可能一张Iceberg表对应的数据文件非常多,那么我们通过Java ...

  4. OpenGL(十四)——Qt OpenGL纹理

    OpenGL(十四)--Qt OpenGL纹理 一.纹理 终于写到纹理的部分了: 纹理(Texture)的本质是一个2D图片(1D和3D),或者叫图形数据.只是在OpenGL中专业术语中称其为纹理. ...

  5. NeHe OpenGL第二十四课:扩展

    NeHe OpenGL第二十四课:扩展 扩展,剪裁和TGA图像文件的加载: 在这一课里,你将学会如何读取你显卡支持的OpenGL的扩展,并在你指定的剪裁区域把它显示出来.   这个教程有一些难度,但它 ...

  6. OpenGL ES教程VI之纹理贴图(原文对照)

    注:又是一篇,是否有人能解释得清楚,2是重复两次,那么是否N就是重复N次呢?接近1.0的坐标值整数部分加上几就是重复几次吗?这个好像之前验证过不一定的. 转自:http://melord.iteye. ...

  7. 二十四孝{做人不孝无异于禽兽,请宏扬我中华美德!}组图

    做人不孝无异于禽兽,请宏扬我中华美德! "孝"是儒家伦理思想的核心,是千百年来中国社会维系家庭关系的道德准则,是中华民族的传统美德,是我中华民族传统文化之精髓.元代郭居敬辑录古代2 ...

  8. 【Visual C++】游戏开发五十七 浅墨DirectX教程二十四 打造游戏GUI界面(二)

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/16922703 作者:毛星 ...

  9. matlab火星漫游车转向控制,OSG开发笔记(二十四):OSG漫游之平移与转向

    若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 本文章博客地址:https://blog.csdn.net/qq21497936/ ...

最新文章

  1. Android接口初了解
  2. PHP China杨格:PHP China 是开发者的“家”
  3. java进程内存一直没释放_面试官:一个线程OOM,进程里其他线程还能运行么?...
  4. python scapy模块安装_python scapy模块安装与依赖模块
  5. Sencha-命令-CMD(与Touch的结合运用)(官网文档翻译30)
  6. 网页框架模版(上、下(左、中、右))
  7. 【OS_Linux】三大文本处理工具之grep命令
  8. spring boot项目发送邮件
  9. LNMP自动部署脚本
  10. 樱(桜) - 堀江由衣 (日语-中文-罗马)
  11. 九份的小巷 特色的民宿
  12. linux内核ddr初始化,嵌入式Linux裸机开发(五)——SDRAM初始化
  13. 微信又支持改微信号了
  14. Ubuntu16.04安装NCCL
  15. Python-MongoDB
  16. 苹果cms vod_list修改
  17. jenkins下载地址deb包
  18. php curl模拟post请求
  19. matlab不连接internet激活_MATLAB R2019b 完整激活教程
  20. 云舒3C,巧解云南电网GIS系统之殇的利刃

热门文章

  1. 使用PostSharp开始AOP
  2. PM Basic Skill---Communicate Plan
  3. JavaWeb学习之Spring框架(一)
  4. left join 与left outer join的区别
  5. 安装class-dump
  6. hadoop nn 运维一例
  7. 收缩Mysql的ibdata1文件大小方法
  8. GNU ARM汇编--(二)汇编编译链接与运行
  9. vs2008编译中文变量名的lua解释器环境
  10. MySQL---表操作