MFC文件和注冊表的操作

MFC文件和注冊表的操作

日志、操作配置文件、ini、注冊表、音視頻的文件存儲

Linux下一切皆文件

C/C++操作文件

const char* 與 char* const

const char* 常量指針,表示指向的內容為常量。指針可以指向其他變量,但是內容不能再變了


char szName[6]="Bingo";
const char* pName = szName;
*pName = 'b';錯誤
//pName常量指針,表示指向的內容為常量。指針可以指向其他變量,但是內容不能再變了
-----------------------------------------------------
char szName[6]="Bingo";
char * const pName=szName;
char *p;錯誤
*pNmae = 'b';正確
//表示pName是指針常量;表示地址是常量。不能再變了。但是內容可以改變

C語言操作文件

_Check_return_wat_
_Success_(return == 0)
_ACRTIMP errno_t __cdecl fopen_s(_Outptr_result_nullonfailure_ FILE** _Stream,_In_z_                   char const* _FileName,_In_z_                   char const* _Mode //文件打開方式
);
  • 文件打開的模式
    • 'r’模式:這是“只讀”模式。如果文件不存在,嘗試打開將失敗。文件指針位于文件開頭,不會清空文件原有內容。
    • 'w’模式:這是“只寫”模式。如果文件存在,它將被清空并從頭開始寫入;如果文件不存在,將創建一個新文件。文件指針位于文件開頭。
    • 'a’模式:**這是“追加”模式。如果文件存在,寫入的數據將添加到文件末尾,不會清空原有內容;**如果文件不存在,將創建一個新文件。文件指針位于文件結尾。
    • 'r+'模式:這是“讀寫”模式。文件必須存在,文件指針位于文件開頭。可以在文件任意位置讀取或寫入內容,寫入操作會覆蓋原有位置的內容。
    • 'w+'模式:這也是“讀寫”模式。它類似于’w’模式,但是它允許讀取操作。打開文件后,會清空文件內原有的內容。
    • 'a+'模式:這同樣是“讀寫”模式。它類似于’a’模式,但是它允許讀取操作。寫入內容時,只會追加在文件尾部。
_Check_return_opt__ACRTIMP size_t __cdecl fwrite(_In_reads_bytes_(_ElementSize * _ElementCount)       void     const*        _Buffer,_In_     size_t        _ElementSize,//一個元素的字節數_In_     size_t        _ElementCount,//元素個數_Inout_  FILE*         _Stream
);

對于寬字節而言 wchar a[20] = “bingo”;

ANSI char a[20]=“bingo”;

fseek(//文件指針的定位_Inout_ FILE* _Stream, //指向FILE結構體指針_In_    long  _Offset, //偏移量_In_    int   _Origin  //指定文件指針的起始位置//SEEK_CUR 當前位置,//SEEK_END 文件結尾位置 //SEEK_SET文件開始位置
);
Ftell 返回文件指針的當前位置
  • 文件操作

    void CMyMFCFileView::OnFileWrite()
    {FILE* pFile = NULL;//打開文件errno_t err = _wfopen_s(&pFile, _T("1.txt"),_T("w"));if (err == 0){MessageBox(_T("Open Success!!"));}else{TRACE("Open Failed ErrorCode = %d", GetLastError());return;}//fwrite()//WCHAR a[20] = L"bingo";//寬字節而言 一個元素的字節數是2//   char a1[20] = "bingo";//ANSI        一個元素的字節數是1//TRACE("*************a = %d, a1 = %d", sizeof(a), sizeof(a1)); //40,20//fwrite("Bingo", 1, strlen("bingo"), pFile);fwrite(L"Bingo", 2, wcslen(_T("bingo")) + 1, pFile);//寬字節fclose(pFile);}void CMyMFCFileView::OnFileRead()
    {FILE* pFile = NULL;//打開文件errno_t err = _wfopen_s(&pFile, _T("1.txt"), _T("r"));if (err != 0){TRACE("Open Failed ErrorCode = %d", GetLastError());return;}
    #if 0WCHAR pBuf[100] = { 0 };//長度是未知的!!!fread(pBuf,2,100,pFile);MessageBox(pBuf);
    #endiffseek(pFile,0,SEEK_END);//偏移到結尾位置int len = ftell(pFile); //文件指針的當前位置(文件長度)WCHAR* pBuf = new WCHAR[len + 1];fseek(pFile, 0, SEEK_SET);//偏移到起始位置//rewind(pFile);//將文件指針重新放到文件開始處pBuf[len] = 0;//確保數組最后一個元素為'\0'fread(pBuf, 2, len, pFile);//從指針位置開始讀MessageBox(pBuf);fclose(pFile);}
    

C++操作文件

ofstream

explicit basic_ofstream(const char* _Filename, ios_base::openmode _Mode = ios_base::out,int _Prot = ios_base::_Default_open_prot)
#include <io.h>
#include <fstream>
using namespace std;void CMyMFCFileView::OnFileWrite()
{ofstream ofs("2.txt"); //第一個參數表示文件名,2打開方式ofs.write("BingoC++", strlen("BingoC++"));ofs.close();
}void CMyMFCFileView::OnFileRead()
{ifstream ifs("2.txt");char pBuf[100] = { 0 };ifs.read(pBuf, 100);USES_CONVERSION;CString str = A2W(pBuf);MessageBox(str); ifs.close();
}

Win32 API/MFC操作文件

CreateFile

文件、管道、郵槽 通信資源、磁盤設備、控制臺、目錄

CreateFileW(LPCWSTR lpFileName,   //創建或打開的對象的名稱DWORD dwDesiredAccess,	//訪問方式 讀、讀寫、寫、查詢 0 GENERIC_READ,GENERIC_WRITEDWORD dwShareMode,		//共享方式 0 LPSECURITY_ATTRIBUTES lpSecurityAttributes, //NULL,安全權限,不能被子進程繼承DWORD dwCreationDisposition,	//如何創建文件 CREATE_NEW CREATE_ALWAYSDWORD dwFlagsAndAttributes,	//設置文件的屬性和標志HANDLE hTemplateFile		//NULL);WriteFile(HANDLE hFile,LPCVOID lpBuffer,DWORD nNumberOfBytesToWrite,		//要寫入的字節數LPDWORD lpNumberOfBytesWritten,	//用來接收實際寫入到文件的字節數LPOVERLAPPED lpOverlapped
);
ReadFile(HANDLE hFile,LPVOID lpBuffer,DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead,LPOVERLAPPED lpOverlapped
);

Win32 API 操作文件

void CMyMFCFileView::OnFileWrite()
{HANDLE hFile;hFile = CreateFile(_T("3.txt"), GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);if (hFile == INVALID_HANDLE_VALUE){TRACE("INVALID_HANDLE_VALUE, ERRORCODE = %d", GetLastError());return;}DWORD dwWrites;WriteFile(hFile, "BingoWin32API", strlen("BingoWin32API"), &dwWrites, NULL);TRACE("###dwWrite = %d", dwWrites);CloseHandle(hFile);}void CMyMFCFileView::OnFileRead()
{HANDLE hFile;hFile = CreateFile(_T("3.txt"), GENERIC_READ, 0, NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);//讀數據、已存在的char pBuf[100] = { 0 };DWORD dwReads;ReadFile(hFile, pBuf, 100, &dwReads, NULL);TRACE("###dwReads = %d", dwReads);CloseHandle(hFile);
}

MFC操作文件

void CMyMFCFileView::OnFileWrite()
{//CFile(LPCTSTR lpszFileName, UINT nOpenFlags);  文件名、CFile file(L"4.txt", CFile::modeCreate | CFile::modeWrite);file.Write("BingoMFC", strlen("BingoMFC"));file.Close();}void CMyMFCFileView::OnFileRead()
{CFile file(L"4.txt", CFile::modeRead);char* pBuf;DWORD dwFileLen = file.GetLength();pBuf = new char[dwFileLen + 1];pBuf[dwFileLen] = 0;file.Read(pBuf, dwFileLen);file.Close();USES_CONVERSION;CString str = A2W(pBuf);MessageBox(str);
}
基于文件對話框的讀寫

派生關系:CFileDialog -> CCommonDialog -> CDialog -> CWnd -> CCmdTarget -> CObject

CFileDialog(BOOL bOpenFileDialog, // TRUE for FileOpen, FALSE for FileSaveAsLPCTSTR lpszDefExt = NULL,LPCTSTR lpszFileName = NULL,DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,LPCTSTR lpszFilter = NULL,CWnd* pParentWnd = NULL,DWORD dwSize = 0,BOOL bVistaStyle = TRUE); 
void CMyMFCFileView::OnFileWrite()
{// 	CFileDialog(BOOL bOpenFileDialog,	// TRUE for 構建一個打開的對話框, FALSE for 構建一個保存對話框
// 		LPCTSTR lpszDefExt = NULL,		// 指定默認的文件擴展名 NULL
// 		LPCTSTR lpszFileName = NULL,	// 初始文件名 NULL 默認沒有初始文件名
// 		DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
// 		LPCTSTR lpszFilter = NULL,		//用來指定一個或一組文件的過濾器
// 		CWnd * pParentWnd = NULL,		//用來指定文件對話框的父窗口或者擁有窗口
// 		DWORD dwSize = 0,				//大小
// 		BOOL bVistaStyle = TRUE);		//可見或者不可見CFileDialog fileDlg(FALSE);fileDlg.m_ofn.lpstrTitle = L"Bingo"; //該窗口標題fileDlg.m_ofn.lpstrFilter = _T("Text Files (*.txt)");fileDlg.m_ofn.lpstrDefExt = L"txt";//默認保存類型//fileDlg.DoModal();if (IDOK == fileDlg.DoModal()){CFile file(fileDlg.GetFileName(), CFile::modeCreate | CFile::modeWrite);USES_CONVERSION;char* szBuf = T2A(fileDlg.GetFileName());TRACE("####fileDlg.GetFileName() = %s", szBuf);file.Write("BingoMFC111", strlen("BingoMFC111"));file.Close();}
}void CMyMFCFileView::OnFileRead()
{
// 	CFileDialog(BOOL bOpenFileDialog,	// TRUE for 構建一個打開的對話框, FALSE for 構建一個保存對話框
// 		LPCTSTR lpszDefExt = NULL,		// 指定默認的文件擴展名 NULL
// 		LPCTSTR lpszFileName = NULL,	// 初始文件名 NULL 默認沒有初始文件名
// 		DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
// 		LPCTSTR lpszFilter = NULL,		//用來指定一個或一組文件的過濾器
// 		CWnd * pParentWnd = NULL,		//用來指定文件對話框的父窗口或者擁有窗口
// 		DWORD dwSize = 0,				//大小
// 		BOOL bVistaStyle = TRUE);		//可見或者不可見CFileDialog fileDlg(TRUE);fileDlg.m_ofn.lpstrTitle = L"Bingo"; //該窗口標題fileDlg.m_ofn.lpstrFilter = _T("Chart Files (*.xlc)|*.xlc|")_T("Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|")_T("*.xlc; *.xls|All Files (*.*)|*.*||"); //該窗口標題//fileDlg.DoModal();if (IDOK == fileDlg.DoModal()){CFile file(fileDlg.GetFileName(), CFile::modeRead);char* pBuf;DWORD dwFileLen = file.GetLength();pBuf = new char[dwFileLen + 1];pBuf[dwFileLen] = 0;file.Read(pBuf, dwFileLen);file.Close();USES_CONVERSION;CString	 szBuf = A2W(pBuf);MessageBox(szBuf);}}

配置文件的訪問與讀寫

[metadata]
title=搜狗雙拼
[聲母]
ch=I
sh=U
void CMyMFCFileView::OnWriteConfig()
{// TODO: 在此添加命令處理程序代碼//獲得當前路徑WCHAR strPath[MAX_PATH] = { 0 };GetCurrentDirectoryW(MAX_PATH, strPath);TRACE("333strPath = %s", strPath);// 當前路徑: E:\奇牛培訓\學習筆記\mfc\MyMFCFile\ + Test.iniCString strFilePath;strFilePath.Format(L"%ls//Test.ini", strPath);WritePrivateProfileStringW(L"metadata", L"title", L"搜狗雙拼", strFilePath);WritePrivateProfileStringW(L"聲母", L"ch", L"I", strFilePath);WritePrivateProfileStringW(L"聲母", L"sh", L"U", strFilePath);
}void CMyMFCFileView::OnReadConfig()
{	//獲得當前路徑WCHAR strPath[MAX_PATH] = { 0 };WCHAR strTitle[MAX_PATH] = { 0 }; WCHAR strCh[MAX_PATH] = { 0 };WCHAR strSh[MAX_PATH] = { 0 };GetCurrentDirectoryW(MAX_PATH, strPath);TRACE("333strPath = %s", strPath);// 當前路徑: E:\奇牛培訓\學習筆記\mfc\MyMFCFile\ + Test.iniCString strFilePath;strFilePath.Format(L"%ls//Test.ini", strPath);DWORD dwNum1 = GetPrivateProfileStringW(L"metadata", L"title", NULL, strTitle, MAX_PATH, strFilePath);DWORD dwNum2 = GetPrivateProfileStringW(L"聲母", L"ch", NULL, strCh, MAX_PATH, strFilePath);DWORD dwNum3 = GetPrivateProfileStringW(L"聲母", L"sh", NULL, strSh, MAX_PATH, strFilePath);TRACE("dwNum1 = %d,dwNum2 = %d,dwNum3 = %d", dwNum1, dwNum2, dwNum3);USES_CONVERSION;char* szTitle = W2A(strTitle);char* szCh = W2A(strCh);char* szSh = W2A(strSh);TRACE("strTitle = %s,strCh = %s,strSh = %s", szTitle, szCh, szSh);
}

注冊表編程

注冊表API

注冊表 存儲在二進制文件里面,win32API提供了大量的函數操作注冊表

注冊表:Win+R組合鍵 regedit

注冊表讀寫

write

	RegCreateKeyW(_In_ HKEY hKey,				//打開的當前項的句柄 實際上就是那幾個分支_In_opt_ LPCWSTR lpSubKey,	//打開或者創建的表項的名稱_Out_ PHKEY phkResult		//用來接收創建或者打開表項句柄 regclose);RegOpenKeyW(_In_ HKEY hKey,_In_opt_ LPCWSTR lpSubKey,_Out_ PHKEY phkResult);//寫入注冊表RegSetValueW(_In_ HKEY hKey,				//打開的當前項的句柄 實際上就是那幾個分支_In_opt_ LPCWSTR lpSubKey,	//打開或者創建的表項的名稱_In_ DWORD dwType,			//只是被存儲信息的類型 REG_SZ類型_In_reads_bytes_opt_(cbData) LPCWSTR lpData,	//要存放到注冊表里面的數據_In_ DWORD cbData			//要存放的字符串數據的大小、長度);RegSetValueExW(_In_ HKEY hKey,				//打開的當前項的句柄 實際上就是那幾個分支_In_opt_ LPCWSTR lpValueName,//指向一個字符串的指針,包含了將要設置值的名稱_Reserved_ DWORD Reserved,	//保留參數	0_In_ DWORD dwType,			//REG_BINARY_In_reads_bytes_opt_(cbData) CONST BYTE * lpData,_In_ DWORD cbData);

·read

	RegQueryValueW(_In_ HKEY hKey,					//打開的當前項的句柄 實際上就是那幾個分支_In_opt_ LPCWSTR lpSubKey,_Out_writes_bytes_to_opt_(*lpcbData, *lpcbData) __out_data_source(REGISTRY) LPWSTR lpData,_Inout_opt_ PLONG lpcbData);
--------------管理員身份運行--------------------
----------------------------------------------
void CMyMFCFileView::OnWriteReg()
{HKEY hKey;DWORD dwAge = 39;//創建注冊表項   管理員權限運行int ret = ::RegCreateKeyW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Rock\\admin", &hKey);//寫注冊表if(ret != ERROR_SUCCESS){TRACE("RegCreateKeyW Failed, ErrorCode = %d", GetLastError());MessageBox(L"創建注冊表失敗");return;}//寫注冊表 ::RegSetValueEx(hKey, L"age", 0, REG_DWORD, (CONST BYTE*) & dwAge, 4);::RegCloseKey(hKey);
}void CMyMFCFileView::OnReadReg()
{HKEY hKey;DWORD dwAge;//創建注冊表項   管理員權限運行int ret = ::RegOpenKeyW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Rock\\admin", &hKey);//寫注冊表if (ret != ERROR_SUCCESS){TRACE("RegOpenKeyW Failed, ErrorCode = %d", GetLastError());MessageBox(L"打開注冊表失敗");return;}//寫注冊表 DWORD dwType;DWORD dwValue;::RegQueryValueEx(hKey, L"age", 0, &dwType, (LPBYTE) & dwAge,&dwValue);TRACE("####dwType = %d, dwValue = %d, dwAge = %d", dwType, dwValue, dwAge);::RegCloseKey(hKey);
}

文件操作的企業級應用

1、調試日志 debugview 文件日志:警告日志 錯誤日志

2、視頻存儲

3、文件傳輸 CFile 與 socket 結合使用

4、C語言和MFC的文件操作用途廣泛;win32API少用 ifstream ofstream

5、配置文件 windows

6、注冊表的操作 病毒 逆向 操作注冊表

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/896308.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/896308.shtml
英文地址,請注明出處:http://en.pswp.cn/news/896308.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

微信小程序源碼逆向 MacOS

前言 日常工作中經常會遇到對小程序的滲透測試&#xff0c;微信小程序的源碼是保存在用戶客戶端本地&#xff0c;在滲透的過程中我們需要提取小程序的源碼進行問題分析&#xff0c;本篇介紹如何在蘋果電腦 MacOS 系統上提取微信小程序的源碼。 0x01 微信小程序提取 在蘋果電…

ubuntu-24.04.1-desktop 中安裝 QT6.7

ubuntu-24.04.1-desktop 中安裝 QT6.7 1 環境準備1.1 安裝 GCC 和必要的開發包:1.2 Xshell 連接 Ubuntu2 安裝 Qt 和 Qt Creator:2.1 下載在線安裝器2.2 在虛擬機中為文件添加可執行權限2.3 配置鏡像地址運行安裝器2.4 錯誤:libxcb-xinerama.so.0: cannot open shared objec…

告別 Freetype,擁抱高效字體處理新方案 - 純c#解析字體庫

在當今數字化的時代&#xff0c;字體處理在眾多領域中都扮演著至關重要的角色&#xff0c;無論是平面設計、網頁開發&#xff0c;還是移動應用、游戲制作&#xff0c;合適的字體選擇與精準的處理都能極大地提升用戶體驗。而在字體處理的技術領域&#xff0c;Freetype 庫一直是開…

React + TypeScript 復雜布局開發實戰

React TypeScript 復雜布局開發實戰 一、項目架構設計&#xff08;基于最新技術棧&#xff09; 1.1 技術選型與工程創建 # 使用Vite 5.x React 19 TypeScript 5.4 npx create-vitelatest power-designer-ui --template react-ts cd power-designer-ui && npm inst…

從最小依賴角度談靜態庫與動態庫的選擇及配置策略

文章目錄 1. 前言2. 靜態庫與動態庫&#xff1a;依賴最小化的抉擇2.1 靜態庫概述2.2 動態庫概述2.3 依賴最小化角度的選擇建議 3. 運行時庫配置策略&#xff1a;/MT 與 /MD 的取舍3.1 /MT 與 /MD 的優劣比較3.2 配置選擇的建議 4. 實際案例與配置示例4.1 靜態庫示例&#xff08…

深度學習pytorch之19種優化算法(optimizer)解析

提示&#xff1a;有謬誤請指正 摘要 本博客詳細介紹了多種常見的深度學習優化算法&#xff0c;包括經典的LBFGS 、Rprop 、Adagrad、RMSprop 、Adadelta 、ASGD 、Adamax、Adam、AdamW、NAdam、RAdam以及SparseAdam等&#xff0c;通過對這些算法的公式和參數說明進行詳細解析…

【深度學習神經網絡學習筆記(二)】神經網絡基礎

神經網絡基礎 神經網絡基礎前言1、Logistic 回歸2、邏輯回歸損失函數3、梯度下降算法4、導數5、導數計算圖6、鏈式法則7、邏輯回歸的梯度下降 神經網絡基礎 前言 Logistic 回歸是一種廣泛應用于統計學和機器學習領域的廣義線性回歸模型&#xff0c;主要用于解決二分類問題。盡…

002簡單MaterialApp主題和Scaffold腳手架

002最簡單的MaterialApp主題和Scaffold腳手架使用導航欄_嗶哩嗶哩_bilibilihttps://www.bilibili.com/video/BV1RZ421p7BL?spm_id_from333.788.videopod.episodes&vd_source68aea1c1d33b45ca3285a52d4ef7365f&p1501.MaterialApp純凈的 /*MaterialApp 是主題,自帶方向設…

DeepSeek開源周Day1:FlashMLA引爆AI推理性能革命!

項目地址&#xff1a;GitHub - deepseek-ai/FlashMLA 開源日歷&#xff1a;2025-02-24起 每日9AM(北京時間)更新&#xff0c;持續五天&#xff01; ? 一、開源周震撼啟幕 繼上周預告后&#xff0c;DeepSeek于北京時間今晨9點準時開源「FlashMLA」&#xff0c;打響開源周五連…

17.C++類型轉換

1. C語言中的類型轉換 在C語言中&#xff0c;如果賦值運算符左右兩側類型不同&#xff0c;或者形參與實參類型不匹配&#xff0c;或者返回值類型與接收返回值類型不一致時&#xff0c;就需要發生類型轉換&#xff0c;C語言中共有兩種形式的類型轉換&#xff1a;隱式類型轉換和顯…

springboot志同道合交友網站設計與實現(代碼+數據庫+LW)

摘 要 現代經濟快節奏發展以及不斷完善升級的信息化技術&#xff0c;讓傳統數據信息的管理升級為軟件存儲&#xff0c;歸納&#xff0c;集中處理數據信息的管理方式。本志同道合交友網站就是在這樣的大環境下誕生&#xff0c;其可以幫助使用者在短時間內處理完畢龐大的數據信…

VMware中的linux常用指令

常用 Linux 基礎命令 文件與目錄操作 ls&#xff1a;查看當前目錄的文件和子目錄&#xff0c;ls -a顯示所有文件&#xff0c;包括隱藏文件。cd&#xff1a;切換目錄&#xff0c;如 **cd ~** 切換到個人家目錄。pwd&#xff1a;查看當前目錄。mkdir&#xff1a;創建文件夾&#…

20250212:https通信

1:防止DNS劫持:使用 https 進行通信。 因為是SDK授權開發,需要盡量壓縮so庫文件和三方依賴。所以第一想法是使用 head only 的 cpp-httplib 進行開發。 cpp-httplib 需要 SSL 版本是 3.0及以上。但本地已經在開發使用的是1.0.2a版本,不滿足需求。 方案1:升級OpenSSL 將Op…

VisionPro-PMA工具

VisionPro-PMA工具 模板匹配的核心概念 康耐視(Cognex)的VisionPro是一款廣泛應用工業自動化的機器視覺軟件平臺&#xff0c;其模板匹配(Pattern Matching)功能是核心工具之一&#xff0c;常用與目標定位、特征識別和質量檢測等場景。 模板匹配&#xff1a;通過預先定義的參…

2025最新最全【大模型學習路線規劃】零基礎入門到精通_大模型 開發 學習路線

第一階段&#xff1a;基礎理論入門 目標&#xff1a;了解大模型的基本概念和背景。 內容&#xff1a; 人工智能演進與大模型興起。 大模型定義及通用人工智能定義。 GPT模型的發展歷程。 第二階段&#xff1a;核心技術解析 目標&#xff1a;深入學習大模型的關鍵技術和工…

使用CSS3DRenderer/CSS2DRenderer給模型上面添加html標簽

先放一下預覽圖 主要使用css2dRender和css3dRender&#xff0c;添加圖片和標簽。 思路&#xff1a;使用css3dRender添加一個圖片&#xff0c;然后獲取的位置坐標&#xff0c;使用css3dRender添加一個文字標簽&#xff0c;也設置這個位置坐標&#xff0c;此外z軸設置一個高度&a…

完美隱藏滾動條方案 (2024 最新驗證)

完美隱藏滾動條方案 (2024 最新驗證) css /* 全局隱藏豎直滾動條但保留滾動功能 */ html {overflow: -moz-scrollbars-none; /* Firefox 舊版 */scrollbar-width: none; /* Firefox 64 */-ms-overflow-style: none; /* IE/Edge */overflow-y: overlay; …

Linux 內核配置機制詳細講解

本文是對 Linux 內核配置機制 make menuconfig 的 超詳細分步解析&#xff0c;涵蓋其工作原理、界面操作、配置邏輯及底層實現&#xff1a; 一、內核配置系統概述 Linux 內核的配置系統是一個 基于文本的交互式配置工具鏈&#xff0c;核心目標是通過定義 CONFIG_XXX 宏來控制內…

視頻裂變加群推廣分享引流源碼

源碼介紹 視頻裂變加群推廣分享引流源碼 最近網上很火&#xff0c;很多人都在用&#xff0c;適合引流裂變推廣 測試環境&#xff1a;PHP7.4(PHP版本不限制) 第一次訪問送五次觀看次數&#xff0c;用戶達到觀看次數后需要分享給好友或者群,好友必須點擊推廣鏈接后才會增加觀看次…

python-leetcode-每日溫度

739. 每日溫度 - 力扣&#xff08;LeetCode&#xff09; class Solution:def dailyTemperatures(self, temperatures: List[int]) -> List[int]:n len(temperatures)answer [0] * nstack [] # 存儲索引for i, temp in enumerate(temperatures):while stack and temperat…