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、注册表的操作 病毒 逆向 操作注册表
相关文章:
MFC文件和注册表的操作
MFC文件和注册表的操作 日志、操作配置文件、ini、注册表、音视频的文件存储 Linux下一切皆文件 C/C操作文件 const char* 与 char* const const char* 常量指针,表示指向的内容为常量。指针可以指向其他变量,但是内容不能再变了 char szName[6]&qu…...
vscode如何使用鼠标滚轮调整字体大小
1.打开设置 2.搜索Font Ligatures 3.编辑配置文件 4.修改代码并保存 修改前 修改后 在最后一行添加:“editor.mouseWheelZoom”: true 记得在上一行最后,加上英文版的“,”逗号 5.配置成功,再次按Ctrl鼠标滚轮便可以缩放了。...
C++之vector和list辨析
std::vector 和 std::list 是 C 标准库中两种常用的容器,它们都用于存储和管理元素集合,但在底层实现和性能特性上有显著的区别。 1. 底层实现 std::vector: 基于动态数组实现。元素在内存中是连续存储的。支持随机访问(通过下标访问元素&a…...
冯诺依曼体系结构 ──── linux第8课
目录 冯诺依曼体系结构 关于冯诺依曼,必须强调几点: 冯诺依曼体系结构 我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系 输入单元:包括键盘, 鼠标,网卡,扫…...
EX_25/2/22
找到第一天mystring练习,实现以下功能 mystring str "hello" mystring ptr "world" str str ptr; str ptr str[0] H #include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #in…...
rust安装教程以及git连接到远程仓库
1.官方网站下载rustup-init程序 链接: rust-lang 从这里可以获取到rust的下载程序,这个下载程序会帮助你下载visual-studio的安装包从而获取相关的编译环境。 tips:无需再下载visual_studio 2确认安装所需要的框架,SKD工具 安装完毕之后可以检查一下 rustc --ve…...
Kafka系列之:记录一次源头数据库刷数据,造成数据丢失的原因
Kafka系列之:记录一次源头数据库刷数据,造成数据丢失的原因 一、背景二、查看topic日志信息三、结论四、解决方法一、背景 源头数据库在很短的时间内刷了大量的数据,部分数据在hdfs丢失了 理论上debezium数据采集不会丢失,就需要排查数据链路某个节点是否有数据丢失。 数据…...
VC++零基础入门之系列教程 【附录E MFC快速参考指南】
附录E MFC快速参考指南 E.1 创建窗口 使用M F C CWnd wnd; W n d . C r e a t e E x ( E xSt y l e , C l a s s N a m e , Wi n d o w N a m e , S t y l e , x , y, Wi d t h , H e i g h t , P a r e n t , M e n u , P a r a m ) ; 使用A P I HWND hwnd=::CreateWi n d …...
在CentOS 7下部署NFS的详细教程
在CentOS 7下部署NFS的详细教程 NFS(Network File System)是一种分布式文件系统协议,允许用户在网络中的不同主机之间共享文件和目录。NFS广泛应用于Linux和Unix系统中,特别适合在集群环境中共享存储资源。本文将详细介绍如何在C…...
LabVIEW C编译支持工具库CCompileSupp.llb
路径:C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\Platform\CCompileSupp.llb 1. 工具库概述 定位:LabVIEW内置的C语言编译支持工具库,用于处理LabVIEW与C/C代码的混合编程接口,涵盖编译器配置、代码生成…...
【含文档+PPT+源码】基于微信小程序的农产品自主供销商城系统
项目介绍 本课程演示的是一款基于微信小程序的农产品自主供销商城系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3…...
MongoDB私人学习笔记
俗话说“好记性不如烂笔头”,编程的海洋如此的浩大,养成做笔记的习惯是成功的一步! 此笔记主要是ZooKeeper3.4.9版本的笔记,并且笔记都是博主自己一字一字编写和记录,有错误的地方欢迎大家指正。 一、基础知识…...
C++---了解STL
上节学习了模板,那么就得谈到C的标准模板库STL。 C98:以模板方式重写了C标准库,引入了STL(标准模板库)。 1.概念 STL(Standard template Libarary)标准模板库:是C标准库的重要组成部分,不仅是一个可复用的组件库&am…...
智能自动化新纪元:AI与UiPath RPA的协同应用场景与技术实践
智能自动化新纪元:AI与UiPath RPA的协同应用场景与技术实践 引言 在数字化转型的浪潮中,企业对于自动化技术的需求已从简单的任务执行转向更复杂的智能决策。传统RPA(Robotic Process Automation)通过模拟人类操作处理重复性任务…...
2025年2月科技热点深度解析:AI竞赛、量子突破与开源革命
引言 2025年的科技领域持续呈现爆发式增长,AI大模型竞争白热化、量子计算商业化加速、开源工具生态繁荣成为本月最受关注的议题。本文结合最新行业动态,从技术突破、商业布局到开发者生态,全面解析当前科技热点,为读者提供深度洞…...
计算机网络————(三)
前文二 前文一 Websocket协议 是一种存在TCP协议之上的协议 当客户端需要了解服务器是否更新就需要不断给客户端发送请求询问是否更新,这行会造成服务端压力很大 而Websocket相当于服务器一旦更新了就会给客户端发送消息表明自己更新了,类似客户端订阅…...
请谈谈 React 中的状态管理,如何使用 Context API 和 Redux 进行状态管理?
一、Context API 深度应用 1. 核心实现原理 通过createContext创建上下文对象,使用Provider组件包裹需要共享状态的组件树,子组件通过useContext Hook或Consumer组件消费数据。 代码示例(主题切换场景): // 创建上…...
【考研】复试相关上机题目
文章目录 22机试回忆版1、判断燃气费描述输入格式输出格式输入样例输出样例 C o d e Code Code 2、统计闰年数量描述输入格式输出格式输入样例输出样例 C o d e Code Code 3、打印图形描述输入格式输出格式 C o d e Code Code 4、密文数据描述输入格式输出格式输入样例输出样例…...
利用机器学习实现实时交易欺诈检测
以下是一个基于Python的银行反欺诈AI应用示例代码,演示如何利用机器学习实现实时交易欺诈检测。该示例使用LightGBM算法训练模型,并通过Flask框架构建实时检测API: python import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preproc…...
Modelfile配置说明
参数说明翻译 参数描述值类型示例用法mirostat启用Mirostat采样以控制困惑度。(默认:0,0禁用,1Mirostat,2Mirostat 2.0)intmirostat 0mirostat_eta影响算法对生成文本反馈的响应速度。较低的学习率将导致调…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...
Qt Quick Controls模块功能及架构
Qt Quick Controls是Qt Quick的一个附加模块,提供了一套用于构建完整用户界面的UI控件。在Qt 6.0中,这个模块经历了重大重构和改进。 一、主要功能和特点 1. 架构重构 完全重写了底层架构,与Qt Quick更紧密集成 移除了对Qt Widgets的依赖&…...
