【OpenGL】二十四、OpenGL 纹理贴图 ( 读取文件内容 | 桌面程序添加控制台窗口 | ‘fopen‘: This function may be unsafe 错误处理 )
文章目錄
- 一、文件讀取
- 二、報錯處理 ( 'fopen': This function or variable may be unsafe. )
- 三、桌面程序添加控制臺窗口
- 四、相關(guān)資源
一、文件讀取
使用 fopen 函數(shù)讀取文件 , 然后將磁盤中的文件讀取到內(nèi)存中 ;
首先使用 fopen 函數(shù)打開文件 , 這里注意盡量使用絕對路徑 , 在 Visual Studio 2019 中使用相對路徑可能打開失敗 ;
// 打開文件FILE* pFile = fopen(filePath, "rb");然后使用 fseek 函數(shù)獲取當前的文件大小 ;
// 判定文件大小, 將文件指針從 "尾部" 開始移動// 移動 0 個字節(jié)// 成功返回 0 , 失敗返回非 0fseek(pFile, 0, SEEK_END);最后調(diào)用 fread 函數(shù)將文件內(nèi)容讀取到數(shù)組中 ;
// 讀取 pFile 指針指向的內(nèi)存中的數(shù)據(jù) // 讀取的數(shù)據(jù)個數(shù)是 nLen 個 // 每個數(shù)據(jù)的大小是 sizeof(unsigned char) 字節(jié) , 即 1 字節(jié) // 將讀取的數(shù)據(jù)存儲到 fileContent 指向的內(nèi)存中fread(fileContent, sizeof(unsigned char), nLen, pFile);代碼示例 :
#include "utils.h"// 加載文件方法 unsigned char* LoadFileContent(const char* filePath) {// 該指針指向的內(nèi)存空間存儲文件內(nèi)容unsigned char* fileContent = nullptr;// 打開文件FILE* pFile = fopen(filePath, "rb"); //printf("打開文件 pFile : %p", pFile);// 如果打開文件成功if (pFile){// 判定文件大小, 將文件指針從 "尾部" 開始移動// 移動 0 個字節(jié)// 成功返回 0 , 失敗返回非 0fseek(pFile, 0, SEEK_END);// 獲取文件指針位置 , 當前文件指針位于文件尾部// 當前的文件指針位置就是文件的字節(jié)長度int nLen = ftell(pFile);// 如果文件長度大于 0 , 才去讀取文件if (nLen > 0) {// 將文件指針 FILE* pFile 移到文件的開始位置rewind(pFile);// 為文件內(nèi)容分配一塊內(nèi)存空間 , 即創(chuàng)建一個 nLen + 1 字節(jié)的數(shù)組// 多出一個字節(jié) , 在字節(jié)末尾添加一個 '\0'fileContent = new unsigned char[nLen + 1];// 讀取 pFile 指針指向的內(nèi)存中的數(shù)據(jù) // 讀取的數(shù)據(jù)個數(shù)是 nLen 個 // 每個數(shù)據(jù)的大小是 sizeof(unsigned char) 字節(jié) , 即 1 字節(jié) // 將讀取的數(shù)據(jù)存儲到 fileContent 指向的內(nèi)存中fread(fileContent, sizeof(unsigned char), nLen, pFile);// 最后第 nLen + 1 個元素 , 索引是 nLen , 設(shè)置為 '\0'fileContent[nLen] = '\0';}// 關(guān)閉文件fclose(pFile);}return fileContent; }調(diào)用上述讀取文件方法 , 并將讀取的內(nèi)容打印出來 :
// 讀取文件內(nèi)容// 絕對路徑 : "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” 文件內(nèi)容是 " 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++ / 命令行 , 設(shè)置如下宏 :
/D_CRT_SECURE_NO_WARNINGS三、桌面程序添加控制臺窗口
桌面程序添加控制臺窗口 : 右鍵點擊項目名稱 , 選擇 " 屬性 " ;
在 " 配置屬性 / 生成事件 / 生成后事件 " 中的 " 命令行 " 輸入框中輸入如下內(nèi)容 ;
editbin /subsystem:console $(OutDir)$(ProjectName).exe運行程序 : 成功讀取到本目錄下的 “test.txt” 文件 , 這里有個問題需要注意 , 在 Visual Studio 2019 中使用相對路徑讀取不到文件 , 必須使用絕對路徑才可以 ;
// 讀取文件內(nèi)容// 絕對路徑 : "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);四、相關(guān)資源
GitHub 地址 : https://github.com/han1202012/OpenGL
( GitHub 源碼始終都會隨著后續(xù)博客的進度更新覆蓋 , 可能沒有本博客的相關(guān)源碼 , 推薦下載博客源碼快照 ) ;
博客源碼快照 : https://download.csdn.net/download/han1202012/14930175
( 該源碼是 Windows 桌面程序 , 使用 Visual Studio 2019 打開 )
總結(jié)
以上是生活随笔為你收集整理的【OpenGL】二十四、OpenGL 纹理贴图 ( 读取文件内容 | 桌面程序添加控制台窗口 | ‘fopen‘: This function may be unsafe 错误处理 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【OpenGL】二十二、OpenGL 光
- 下一篇: 【RecyclerView】二、Recy