Json的應用實例——cad 二次開發c#

以下是一個使用AutoCAD C#.NET API實現你需求的示例代碼,代碼實現了提示用戶選擇一個實體,將一些字符串變量及其對應的值組成JSON格式數據存儲到實體的擴展數據(XData)中,并在彈出窗口中顯示該實體的所有擴展數據信息。

?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Newtonsoft.Json; // 需要引入Newtonsoft.Json庫

namespace AcadXDataExample
{
? ? public class AcadXDataSample
? ? {
? ? ? ? [Autodesk.AutoCAD.Runtime.CommandMethod("SetAndShowXData")]
? ? ? ? public void SetAndShowXData()
? ? ? ? {
? ? ? ? ? ? Document doc = Application.DocumentManager.MdiActiveDocument;
? ? ? ? ? ? Database db = doc.Database;
? ? ? ? ? ? Editor ed = doc.Editor;

? ? ? ? ? ? // 提示用戶選擇一個實體
? ? ? ? ? ? PromptEntityOptions promptEntityOptions = new PromptEntityOptions("\n請選擇一個實體: ");
? ? ? ? ? ? PromptEntityResult promptEntityResult = ed.GetEntity(promptEntityOptions);
? ? ? ? ? ? if (promptEntityResult.Status != PromptStatus.OK)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? return;
? ? ? ? ? ? }

? ? ? ? ? ? // 定義一些字符串變量和對應的值
? ? ? ? ? ? string key1 = "Name";
? ? ? ? ? ? string value1 = "SampleEntity";
? ? ? ? ? ? string key2 = "Description";
? ? ? ? ? ? string value2 = "This is a sample entity for testing XData";

? ? ? ? ? ? // 將鍵值對組成字典
? ? ? ? ? ? Dictionary<string, string> dataDict = new Dictionary<string, string>
? ? ? ? ? ? {
? ? ? ? ? ? ? ? { key1, value1 },
? ? ? ? ? ? ? ? { key2, value2 }
? ? ? ? ? ? };

? ? ? ? ? ? // 將字典轉換為JSON字符串
? ? ? ? ? ? string jsonData = JsonConvert.SerializeObject(dataDict);

? ? ? ? ? ? // 將JSON字符串存儲為擴展數據(XData)
? ? ? ? ? ? using (Transaction trans = db.TransactionManager.StartTransaction())
? ? ? ? ? ? {
? ? ? ? ? ? ? ? try
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? Entity entity = trans.GetObject(promptEntityResult.ObjectId, OpenMode.ForWrite) as Entity;
? ? ? ? ? ? ? ? ? ? if (entity != null)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? // 創建擴展數據的頭部
? ? ? ? ? ? ? ? ? ? ? ? ResultBuffer rb = new ResultBuffer(
? ? ? ? ? ? ? ? ? ? ? ? ? ? new TypedValue((int)DxfCode.ExtendedDataRegAppName, "MyXDataApp"),
? ? ? ? ? ? ? ? ? ? ? ? ? ? new TypedValue((int)DxfCode.Text, jsonData)
? ? ? ? ? ? ? ? ? ? ? ? );
? ? ? ? ? ? ? ? ? ? ? ? entity.XData = rb;
? ? ? ? ? ? ? ? ? ? ? ? trans.Commit();
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? catch (Exception ex)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? trans.Abort();
? ? ? ? ? ? ? ? ? ? MessageBox.Show($"存儲擴展數據時出錯: {ex.Message}");
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }

? ? ? ? ? ? // 讀取并顯示實體的擴展數據
? ? ? ? ? ? using (Transaction trans = db.TransactionManager.StartTransaction())
? ? ? ? ? ? {
? ? ? ? ? ? ? ? try
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? Entity entity = trans.GetObject(promptEntityResult.ObjectId, OpenMode.ForRead) as Entity;
? ? ? ? ? ? ? ? ? ? if (entity != null && entity.HasXData)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ResultBuffer xData = entity.XData;
? ? ? ? ? ? ? ? ? ? ? ? StringBuilder sb = new StringBuilder();
? ? ? ? ? ? ? ? ? ? ? ? sb.AppendLine("實體的擴展數據信息:");
? ? ? ? ? ? ? ? ? ? ? ? foreach (TypedValue tv in xData)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? sb.AppendLine($"類型碼: {tv.TypeCode}, 值: {tv.Value}");
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? MessageBox.Show(sb.ToString());
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? trans.Commit();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? catch (Exception ex)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? trans.Abort();
? ? ? ? ? ? ? ? ? ? MessageBox.Show($"讀取擴展數據時出錯: {ex.Message}");
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
上面代碼修改后版本:

?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Newtonsoft.Json; // 需要引入Newtonsoft.Json庫

namespace AcadXDataExample
{
? ? public class AcadXDataSample
? ? {
? ? ? ? [Autodesk.AutoCAD.Runtime.CommandMethod("SetAndShowXData")]
? ? ? ? public void SetAndShowXData()
? ? ? ? {
? ? ? ? ? ? Document doc = Application.DocumentManager.MdiActiveDocument;
? ? ? ? ? ? Database db = doc.Database;
? ? ? ? ? ? Editor ed = doc.Editor;

? ? ? ? ? ? // 提示用戶選擇一個實體
? ? ? ? ? ? PromptEntityOptions promptEntityOptions = new PromptEntityOptions("\n請選擇一個實體: ");
? ? ? ? ? ? PromptEntityResult promptEntityResult = ed.GetEntity(promptEntityOptions);
? ? ? ? ? ? if (promptEntityResult.Status != PromptStatus.OK)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? return;
? ? ? ? ? ? }

? ? ? ? ? ? // 定義一些字符串變量和對應的值
? ? ? ? ? ? string key1 = "Name";
? ? ? ? ? ? string value1 = "SampleEntity";
? ? ? ? ? ? string key2 = "Description";
? ? ? ? ? ? string value2 = "This is a sample entity for testing XData";

? ? ? ? ? ? // 將鍵值對存儲為擴展數據(XData)
? ? ? ? ? ? using (Transaction trans = db.TransactionManager.StartTransaction())
? ? ? ? ? ? {
? ? ? ? ? ? ? ? try
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? Entity entity = trans.GetObject(promptEntityResult.ObjectId, OpenMode.ForWrite) as Entity;
? ? ? ? ? ? ? ? ? ? if (entity != null)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? // 創建擴展數據的頭部
? ? ? ? ? ? ? ? ? ? ? ? ResultBuffer rb = new ResultBuffer(
? ? ? ? ? ? ? ? ? ? ? ? ? ? new TypedValue((int)DxfCode.ExtendedDataRegAppName, "MyXDataApp")
? ? ? ? ? ? ? ? ? ? ? ? );

? ? ? ? ? ? ? ? ? ? ? ? // 為每個鍵值對添加一個條目
? ? ? ? ? ? ? ? ? ? ? ? rb.Add(new TypedValue((int)DxfCode.Text, key1));
? ? ? ? ? ? ? ? ? ? ? ? rb.Add(new TypedValue((int)DxfCode.Text, value1));
? ? ? ? ? ? ? ? ? ? ? ? rb.Add(new TypedValue((int)DxfCode.Text, key2));
? ? ? ? ? ? ? ? ? ? ? ? rb.Add(new TypedValue((int)DxfCode.Text, value2));

? ? ? ? ? ? ? ? ? ? ? ? entity.XData = rb;
? ? ? ? ? ? ? ? ? ? ? ? trans.Commit();
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? catch (Exception ex)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? trans.Abort();
? ? ? ? ? ? ? ? ? ? MessageBox.Show($"存儲擴展數據時出錯: {ex.Message}");
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }

? ? ? ? ? ? // 讀取并顯示實體的擴展數據
? ? ? ? ? ? using (Transaction trans = db.TransactionManager.StartTransaction())
? ? ? ? ? ? {
? ? ? ? ? ? ? ? try
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? Entity entity = trans.GetObject(promptEntityResult.ObjectId, OpenMode.ForRead) as Entity;
? ? ? ? ? ? ? ? ? ? if (entity != null && entity.HasXData)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ResultBuffer xData = entity.XData;
? ? ? ? ? ? ? ? ? ? ? ? StringBuilder sb = new StringBuilder();
? ? ? ? ? ? ? ? ? ? ? ? sb.AppendLine("實體的擴展數據信息:");
? ? ? ? ? ? ? ? ? ? ? ? for (int i = 0; i < xData.Count; i += 2)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? string key = xData[i].Value.ToString();
? ? ? ? ? ? ? ? ? ? ? ? ? ? string value = xData[i + 1].Value.ToString();
? ? ? ? ? ? ? ? ? ? ? ? ? ? sb.AppendLine($"鍵: {key}, 值: {value}");
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? MessageBox.Show(sb.ToString());
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? trans.Commit();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? catch (Exception ex)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? trans.Abort();
? ? ? ? ? ? ? ? ? ? MessageBox.Show($"讀取擴展數據時出錯: {ex.Message}");
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? }
}

原始代碼特點及邏輯:

?

將鍵值對先組織成字典,然后通過?Newtonsoft.Json?庫序列化為JSON字符串。

?

在擴展數據(XData)中存儲時,只有兩個?TypedValue?,一個是應用程序名稱(?MyXDataApp?),另一個是包含所有鍵值對信息的JSON字符串。

?

讀取時直接遍歷整個?ResultBuffer?顯示類型碼和值,對于JSON數據需要進一步解析才能獲取具體鍵值對內容。

?

修改后代碼特點及邏輯:

?

沒有使用JSON序列化,而是直接將每個鍵值對分別以?TypedValue?的形式添加到?ResultBuffer?中,每個鍵值對占用兩個?TypedValue?(一個鍵,一個值)。

?

存儲擴展數據時,先添加應用程序名稱的?TypedValue?,然后依次添加各個鍵值對的?TypedValue?。

?

讀取時,通過循環以步長為2的方式遍歷?ResultBuffer?,每次取出兩個?TypedValue?分別作為鍵和值進行顯示。

?

總結:

?

- 修改后的代碼不依賴?Newtonsoft.Json?庫,直接以簡單的鍵值對形式存儲和讀取擴展數據,邏輯相對更直接,對于簡單的鍵值對存儲和讀取場景比較清晰易懂。

?

- 原始代碼使用JSON格式存儲,可以方便地存儲更復雜的數據結構(如嵌套的對象、數組等),但在讀取時如果需要解析具體內容會相對復雜一些。

?

所以,修改后的代碼在功能上是正確的,實現了將鍵值對存儲到實體擴展數據并讀取顯示的功能,只是與原始代碼在數據處理方式上有差異,具體使用哪種方式可以根據實際需求(如是否需要處理復雜數據結構、是否方便解析等)來決定。

?

以下是一個完整的C#示例代碼,展示了如何在CAD C#開發中使用JSON來表示和處理擴展數據。為了簡化示例,我將不包括與特定CAD API的交互部分,因為這部分會依賴于你所使用的CAD系統和API。不過,我會展示如何解析和生成JSON數據,并假設你已經有方法從CAD對象中獲取和設置擴展數據。

?

using System;
using Newtonsoft.Json;

// 定義一個類來映射JSON數據的結構
public class ExtendedData
{
? ? public string Name { get; set; }
? ? public string Description { get; set; }
? ? public string Creator { get; set; }
? ? public DateTime CreatedDate { get; set; }
}

class Program
{
? ? static void Main(string[] args)
? ? {
? ? ? ? // 示例JSON字符串
? ? ? ? string jsonString = "{\"name\":\"ExampleObject\",\"description\":\"This is an example object with extended data.\",\"creator\":\"John Doe\",\"createdDate\":\"2025-03-21T17:17:08\"}";

? ? ? ? // 解析JSON字符串為ExtendedData對象
? ? ? ? ExtendedData extendedData = JsonConvert.DeserializeObject<ExtendedData>(jsonString);

? ? ? ? // 輸出解析后的數據
? ? ? ? Console.WriteLine("Parsed Extended Data:");
? ? ? ? Console.WriteLine($"Name: {extendedData.Name}");
? ? ? ? Console.WriteLine($"Description: {extendedData.Description}");
? ? ? ? Console.WriteLine($"Creator: {extendedData.Creator}");
? ? ? ? Console.WriteLine($"Created Date: {extendedData.CreatedDate}");

? ? ? ? // 假設這里有一個方法將ExtendedData對象轉換為適合CAD API的格式并添加到CAD對象中
? ? ? ? // AddExtendedDataToCadObject(extendedData);

? ? ? ? // 假設從CAD對象中獲取了擴展數據的字符串表示
? ? ? ? // 這里我們再次使用相同的jsonString作為示例
? ? ? ? string extendedDataJson = jsonString; // 實際上,這應該從CAD對象中獲取

? ? ? ? // 解析從CAD對象中獲取的JSON字符串為ExtendedData對象
? ? ? ? ExtendedData retrievedData = JsonConvert.DeserializeObject<ExtendedData>(extendedDataJson);

? ? ? ? // 輸出再次解析后的數據
? ? ? ? Console.WriteLine("\nRetrieved Extended Data:");
? ? ? ? Console.WriteLine($"Name: {retrievedData.Name}");
? ? ? ? Console.WriteLine($"Description: {retrievedData.Description}");
? ? ? ? Console.WriteLine($"Creator: {retrievedData.Creator}");
? ? ? ? Console.WriteLine($"Created Date: {retrievedData.CreatedDate}");
? ? }

? ? // 假設這里有一個方法從CAD對象中獲取擴展數據的字符串表示
? ? // static string GetExtendedDataFromCadObject()
? ? // {
? ? // ? ? // 實現獲取擴展數據的邏輯
? ? // ? ? return "{\"name\":\"ExampleObject\",\"description\":\"This is an example object with extended data.\",\"creator\":\"John Doe\",\"createdDate\":\"2025-03-21T17:17:08\"}";
? ? // }
}

?

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

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

相關文章

Springboot的jak安裝與配置教程

目錄 Windows系統 macOS系統 Linux系統 Windows系統 下載JDK&#xff1a; 訪問Oracle官網或其他JDK提供商網站&#xff0c;下載適合Windows系統的JDK版本。網站地址&#xff1a;Oracle 甲骨文中國 | 云應用和云平臺點擊進入下滑&#xff0c;點擊進入下載根據自己的系統選擇&…

Python與區塊鏈隱私保護技術:如何在去中心化世界中保障數據安全

Python與區塊鏈隱私保護技術:如何在去中心化世界中保障數據安全 在區塊鏈世界里,透明性和不可篡改性是兩大核心優勢,但這也帶來了一個悖論——如何在公開賬本的同時保障用戶隱私?如果你的交易記錄對所有人可見,如何防止敏感信息泄露? Python 作為區塊鏈開發中最受歡迎的…

通俗詳解redis底層數據結構哈希表之漸進式rehash

一、為什么要用漸進式rehash&#xff1f; 假設你家的舊柜子&#xff08;哈希表&#xff09;裝滿了&#xff0c;需要換個大柜子。如果一次性把所有東西倒騰到新柜子&#xff0c;你可能得停下手頭所有事&#xff0c;累得半死&#xff08;這就是傳統rehash的問題&#xff1a;卡頓…

基于 FPGA的HLS技術與應用

1、hls簡介 HLS &#xff08; high level synthesis &#xff09;即高層次綜合&#xff0c;主要是利用高級編程語言實現算法。 2、循環優化 絕大多數循環都以串行的方式執行&#xff0c;這種執行方式比較浪費時間。對于串行的循環有兩種優化方式&#xff0c;轉為 并行( Unrol…

Kafka consumer_offsets 主題深度剖析

Kafka consumer_offsets 主題深度剖析 在 Apache Kafka 的消息消費機制中&#xff0c;確保消息被可靠消費是一個核心問題。為了解決這個問題&#xff0c;Kafka 設計了一個特殊的內部主題 consumer_offsets&#xff0c;用于跟蹤和管理消費者組的消費進度。 consumer_offsets 的…

基于javaweb的SpringBoot時裝購物系統設計與實現(源碼+文檔+部署講解)

技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論…

B站pwn教程筆記-5

復習和回顧 首先復習一下ELF文件在內存和磁盤中的不同。內存只關注讀寫這權限&#xff0c;會合并一些代碼段。 動態鏈接庫只在內存中單獨裝在一份 因為很多軟件都要用動態鏈接庫了&#xff0c;不可能一個個單獨復制一份。但是在有的調試環境下會單獨顯示出來各一份。 ld.so是裝…

云原生網絡拓撲:服務網格的量子糾纏效應

引言&#xff1a;數據平面的蟲洞躍遷 谷歌服務網格每日處理5萬億請求&#xff0c;Istio 1.20版本時延降低至0.8ms。螞蟻集團Mesh架構節省42%CPU開銷&#xff0c;AWS App Mesh實現100ms跨區故障切換。LinkedIn Envoy配置規則達1200萬條&#xff0c;騰訊云API網關QPS突破900萬。…

爬蟲——playwright獲取亞馬遜數據

目錄 playwright簡介使用playwright初窺亞馬遜安裝playwright打開亞馬遜頁面 搞數據搜索修改bug數據獲取翻頁優化結構 簡單保存 playwright簡介 playwright是微軟新出的一個測試工具&#xff0c;與selenium類似&#xff0c;不過與selenium比起來還是有其自身的優勢的&#xff…

Matrix-Breakout-2-Morpheus靶場通關心得:技巧與經驗分享

1.安裝靶機&#xff0c;并在虛擬機打開&#xff0c;確保和kali在同一個NAT網段 2.使用kali來確定該靶機的IP nmap -O 192.168.139.1/24 3.訪問該IP192.168.139.171 4.訪問robots.txt 5.掃描目錄 gobuster dir -u http://192.168.139.171 -x php,bak,txt,html -w /usr/share/d…

機器學習掃盲系列(2)- 深入淺出“反向傳播”-1

系列文章目錄 機器學習掃盲系列&#xff08;1&#xff09;- 序 機器學習掃盲系列&#xff08;2&#xff09;- 深入淺出“反向傳播”-1 文章目錄 前言一、神經網絡的本質二、線性問題解析解的不可行性梯度下降與隨機梯度下降鏈式法則 三、非線性問題激活函數 前言 反向傳播(Ba…

(一)飛行器的姿態歐拉角, 歐拉旋轉, 完全數學推導(基于坐標基的變換矩陣).(偏航角,俯仰角,橫滾角)

(這篇寫的全是基矢變換矩陣)不是坐標變換矩陣,坐標變換矩陣的話轉置一下,之后會有推導. 是通過M轉置變換到P撇點.

C語言和C++到底有什么關系?

C 讀作“C 加加”&#xff0c;是“C Plus Plus”的簡稱。 顧名思義&#xff0c;C 就是在 C 語言的基礎上增加了新特性&#xff0c;玩出了新花樣&#xff0c;所以才說“Plus”&#xff0c;就像 Win11 和 Win10、iPhone 15 和 iPhone 15 Pro 的關系。 C 語言是 1972 年由美國貝…

PCB畫圖軟件PROTEL99SE學習-05畫出銅箔來

sch設計的是各個器件的電連接。設計的就是各種節點的網絡表關系。不管你器件怎么擺放&#xff0c;好看不好看。都不重要。最終設計電路板是把網絡表中連線的網絡節點都用銅箔實物相連&#xff0c;讓他們導電。 網表導出后我們不用去看他&#xff0c;也不用管他的格式。 我們打開…

helm部署metricbeat

背景 在Elastic Stack 7.5版本之前&#xff0c;系統默認采用內置服務進行監控數據采集&#xff08;稱為內部收集機制&#xff09;&#xff0c;這種設計存在顯著局限性&#xff1a; 當ES集群崩潰時自帶的節點監控也會隨之崩潰&#xff0c;直到集群恢復前&#xff0c;崩潰期間的…

【菜鳥飛】AI多模態:vsCode下python訪問阿里云通義文生圖API

目標 有很多多模態的AI工具&#xff0c;用的少就用在線圖形化的&#xff0c;需要批量&#xff0c;就嘗試代碼生成&#xff0c;本文嘗試代碼調用多模態AI&#xff0c;阿里通義有免費額度&#xff0c;作為練手應該挺好&#xff0c;如果以后選其他的&#xff0c;技術也是相通的。…

從零實現本地文生圖部署(Stable Diffusion)

1. 依賴安裝 文件打包下載地址&#xff08;Stable Diffusion&#xff09; # git &#xff1a; 用于下載源碼 https://git-scm.com/downloads/win # Python 作為基礎編譯環境 https://www.python.org/downloads/ # Nvidia 驅動&#xff0c;用于編譯使用GPU顯卡硬件 https://ww…

緩存監控治理在游戲業務的實踐和探索

作者&#xff1a;來自 vivo 互聯網服務器團隊- Wang Zhi 通過對 Redis 和 Caffeine 的緩存監控快速發現和定位問題降低故障的影響面。 一、緩存監控的背景 游戲業務中存在大量的高頻請求尤其是對熱門游戲而言&#xff0c;而應對高并發場景緩存是一個常見且有效的手段。 游戲業…

WordPress漏洞

一&#xff0c;后臺修改模板拿WebShell 1&#xff0c;安裝好靶場后訪問 2&#xff0c;在如圖所示的位置選擇一個php文件寫入一句話木馬&#xff0c;我們這里選擇在404.php中寫入 3&#xff0c;訪問404.php 二&#xff0c;上傳主題拿WebShell 1&#xff0c;找到如圖所示的頁面…

【Linux系列】實時監控磁盤空間:`watch -n 1 ‘df -h‘` 命令詳解

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…