C# ftp帮助类 项目实战优化版
上位机开发中有时要与客户的文件服务器进行数据交互。如Mapping文件下载。结果文件上传等。我在项目中就常用到。现在把项目实战代码进行分享一下。
功能列表:连接服务器,下载文件,上传文件,删除服务器文件,获取当前目录下明细(包含文件和文件夹) ,获取FTP文件列表(包括文件夹),获取当前目录下文件列表(不包括文件夹) ,创建文件夹,获取指定文件大小 ,更改文件名,移动文件 ,删除ftpURI目录下指定的文件夹
调用
1.初始化连接
CommonData.FtpServer_MappingFile = new FTPHelper(ftpIPAddress, ftpUser, ftpPw);
2.下载
//url 服务器下载地址
//savefilePath 保存文件目录
//fileName 文件名,只是文件名
CommonData.FtpServer_MappingFile.DownloadByUrl(url, savefilePath, fileName, true);
3.上传
//currentDirectory 本地文件完整路径包括文件名
//ftpUploadFileName FTP服务器完整上传路径包括文件名
CommonData.FtpServer_MappingFile.Upload(currentDirectory, ftpUploadFileName);
代码
/// <summary>/// ftp帮助类/// </summary>public class FTPHelper{#region 字段string ftpURI;string ftpUserID;string ftpServerIP;string ftpPassword;string ftpRemotePath;/// <summary>/// 下载URL/// </summary>public string DownloadUrl { get; set; }#endregionpublic string GetFtpURI(){return ftpURI;}//public FTPHelper() { }/// <summary> /// 连接FTP服务器/// </summary> /// <param name="FtpServerIP">FTP连接地址</param> /// <param name="FtpRemotePath">指定FTP连接成功后的当前目录, 如果不指定即默认为根目录</param> /// <param name="FtpUserID">用户名</param> /// <param name="FtpPassword">密码</param> public FTPHelper(string FtpServerIP, string FtpRemotePath, string FtpUserID, string FtpPassword, bool isFile = false){ftpServerIP = FtpServerIP;ftpRemotePath = FtpRemotePath;ftpUserID = FtpUserID;ftpPassword = FtpPassword;//ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";if (isFile){ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath.Replace("\\", "/");}}/// <summary> /// 连接FTP服务器/// </summary> /// <param name="FtpServerIP">FTP连接地址</param> /// <param name="FtpRemotePath">指定FTP连接成功后的当前目录, 如果不指定即默认为根目录</param> /// <param name="FtpUserID">用户名</param> /// <param name="FtpPassword">密码</param> public FTPHelper(string FtpServerIP, string FtpUserID, string FtpPassword){ftpServerIP = FtpServerIP;//ftpRemotePath = FtpRemotePath;ftpUserID = FtpUserID;ftpPassword = FtpPassword;//ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";ftpURI = "ftp://" + ftpServerIP;//+ "/" + ftpRemotePath + "/";//if (isFile)//{// ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath.Replace("\\", "/");//}}/// <summary> /// 上传 filename是本地图片的地址/// </summary> public void Upload(string filename){FileInfo fileInf = new FileInfo(filename);FtpWebRequest reqFTP;reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileInf.Name));reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);reqFTP.Method = WebRequestMethods.Ftp.UploadFile;reqFTP.KeepAlive = false;reqFTP.UseBinary = true;reqFTP.ContentLength = fileInf.Length;int buffLength = 2048;byte[] buff = new byte[buffLength];int contentLen;FileStream fs = fileInf.OpenRead();try{Stream strm = reqFTP.GetRequestStream();contentLen = fs.Read(buff, 0, buffLength);while (contentLen != 0){strm.Write(buff, 0, contentLen);contentLen = fs.Read(buff, 0, buffLength);}strm.Close();fs.Close();}catch (Exception ex){throw new Exception(ex.Message);}}/// <summary>/// 上传/// </summary>/// <param name="fileName">是本地文件全路径</param>/// <param name="ftpUrl"></param>/// <param name="lmDir"></param>/// <returns></returns>public CommonResultModel<string> Upload(string fileName, string ftpUrl){var resultModel = new CommonResultModel<string>();FileInfo fileInf = null;FtpWebRequest reqFTP;Stream strm = null;FileStream fs = null;var uploadUrl = string.Empty;try{//ip/指定目录/lotId/pid.csvuploadUrl = ftpURI + ftpUrl;resultModel.Data = uploadUrl;//var ftpDir = uploadUrl.Replace(lmDir, string.Empty);var ftpDirList = ftpUrl.Split('/').ToList();ftpDirList = ftpDirList.FindAll(t => t.Length > 0).FindAll(t => !t.Contains("."));var newDir = ftpURI;//判断文件夹是否存在//resultModel.Msg = "Upload 判断文件夹是否存在 ";//CommonDefine.SaveWorkLogs(resultModel.Msg);foreach (var item in ftpDirList){//newDir += "/" + item;var isExists = FolderExists(newDir, item);newDir += "/" + item;//resultModel.Msg += "newDir:" + newDir + ",isExists:" + isExists + ",";//CommonDefine.SaveWorkLogs(resultModel.Msg);if (!isExists){var makeDirResultModel = MakeDir(newDir);//CommonDefine.SaveWorkLogs(resultModel.Msg// + ", MakeDir: IsSucceed=" + makeDirResultModel.IsSucceed + ",msg:" + makeDirResultModel.Msg);//if (!makeDirResultModel.IsSucceed)//{// throw new Exception(makeDirResultModel.Msg);//}}}fileInf = new FileInfo(fileName);reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uploadUrl));reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);reqFTP.Method = WebRequestMethods.Ftp.UploadFile;reqFTP.KeepAlive = false;reqFTP.UseBinary = true;reqFTP.ContentLength = fileInf.Length;int buffLength = 2048;byte[] buff = new byte[buffLength];int contentLen;fs = fileInf.OpenRead();strm = reqFTP.GetRequestStream();contentLen = fs.Read(buff, 0, buffLength);while (contentLen != 0){strm.Write(buff, 0, contentLen);contentLen = fs.Read(buff, 0, buffLength);}}catch (Exception ex){//throw new Exception("uploadUrl:" + uploadUrl + ",Message:" + ex.Message);resultModel.Msg = "异常:" + ex.Message;}finally{if (strm != null){strm.Close();}if (fs != null){fs.Close();}}return resultModel;}/// <summary> /// 下载 filePath是下载到本机的地址fileName是需要下载的文件的名字/// </summary> public void Download(string filePath, string fileName, bool isFile = false){try{FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);FtpWebRequest reqFTP;if (isFile){reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI));}else{reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileName));}reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;reqFTP.UseBinary = true;FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();Stream ftpStream = response.GetResponseStream();long cl = response.ContentLength;int bufferSize = 2048;int readCount;byte[] buffer = new byte[bufferSize];readCount = ftpStream.Read(buffer, 0, bufferSize);while (readCount > 0){outputStream.Write(buffer, 0, readCount);readCount = ftpStream.Read(buffer, 0, bufferSize);}ftpStream.Close();outputStream.Close();response.Close();}catch (Exception ex){throw new Exception(ex.Message);}}/// <summary>/// 下载 filePath是下载到本机的地址fileName是需要下载的文件的名字/// </summary>/// <param name="ftpFilePath">FTP下载文件的路径(/mapping/xxx)</param>/// <param name="savefilePath">本地保存文件路径</param>/// <param name="savefileName">本地保存文件</param>/// <param name="isFile">是否是文件</param>public void DownloadByUrl(string ftpFilePath, string savefilePath, string savefileName, bool isFile = false){try{FileStream outputStream = new FileStream(savefilePath + "\\" + savefileName, FileMode.Create);FtpWebRequest reqFTP;ftpFilePath = ftpFilePath.Replace("\\", "/");if (isFile){//DownloadUrl = ftpURI;DownloadUrl = ftpURI + ftpFilePath;reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(DownloadUrl));}else{//var url = ftpURI + "//" + ftpFilePath.Trim().TrimStart('\\').TrimStart('/');DownloadUrl = ftpURI + ftpFilePath;reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(DownloadUrl));}reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;reqFTP.UseBinary = true;FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();Stream ftpStream = response.GetResponseStream();long cl = response.ContentLength;int bufferSize = 2048;int readCount;byte[] buffer = new byte[bufferSize];readCount = ftpStream.Read(buffer, 0, bufferSize);while (readCount > 0){outputStream.Write(buffer, 0, readCount);readCount = ftpStream.Read(buffer, 0, bufferSize);}ftpStream.Close();outputStream.Close();response.Close();}catch (Exception ex){throw new Exception("DownloadUrl:" + DownloadUrl + ", errorMsg:" + ex.Message);}}/// <summary> /// 删除服务器的文件 fileName是需要删除的文件的名字/// </summary> public void Delete(string fileName){try{FtpWebRequest reqFTP;reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileName));reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;reqFTP.KeepAlive = false;string result = String.Empty;FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();long size = response.ContentLength;Stream datastream = response.GetResponseStream();StreamReader sr = new StreamReader(datastream);result = sr.ReadToEnd();sr.Close();datastream.Close();response.Close();}catch (Exception ex){throw new Exception(ex.Message);}}/// <summary> /// 获取当前目录下明细(包含文件和文件夹) /// </summary> public string[] GetFilesDetailList(){try{StringBuilder result = new StringBuilder();FtpWebRequest ftp;ftp = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI));ftp.Credentials = new NetworkCredential(ftpUserID, ftpPassword);ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;WebResponse response = ftp.GetResponse();StreamReader reader = new StreamReader(response.GetResponseStream());string line = reader.ReadLine();line = reader.ReadLine();line = reader.ReadLine();while (line != null){result.Append(line);result.Append("\n");line = reader.ReadLine();}result.Remove(result.ToString().LastIndexOf("\n"), 1);reader.Close();response.Close();return result.ToString().Split('\n');}catch (Exception ex){throw new Exception(ex.Message);}}/// <summary> /// 获取FTP文件列表(包括文件夹)/// </summary> private List<string> GetAllList(string url){List<string> list = new List<string>();FtpWebRequest req = (FtpWebRequest)WebRequest.Create(new Uri(url));req.Credentials = new NetworkCredential(ftpUserID, ftpPassword);req.Method = WebRequestMethods.Ftp.ListDirectory;req.UseBinary = true;req.UsePassive = true;try{using (FtpWebResponse res = (FtpWebResponse)req.GetResponse()){using (StreamReader sr = new StreamReader(res.GetResponseStream())){string s;while ((s = sr.ReadLine()) != null){list.Add(s);}}}}catch (Exception ex){throw (ex);}return list;}/// <summary> /// 获取当前目录下文件列表(不包括文件夹) /// </summary> public List<string> GetFileList(string url){var fileNameList = new List<string>();//StringBuilder result = new StringBuilder();FtpWebRequest reqFTP;try{reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));reqFTP.UseBinary = true;reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;WebResponse response = reqFTP.GetResponse();StreamReader reader = new StreamReader(response.GetResponseStream());string line = reader.ReadLine();while (line != null){//rwxrwxr-- 1 1001 1001 4520 Oct 31 2023 AD2300225P1.xmlCommonDefine.SaveWorkLogs("GetFileList() " + line);//if (line.IndexOf("<DIR>") == -1)//{// var fileName = Regex.Match(line, @"[\S]+ [\S]+", RegexOptions.IgnoreCase).Value.Split(' ')[1];// CommonDefine.SaveWorkLogs("GetFileList()1 fileName:" + fileName);// result.Append(fileName);// result.Append("\n");//}var textList = line.Split(' ').ToList();var fileName = textList.LastOrDefault();//result.Append(fileName);fileNameList.Add(fileName);line = reader.ReadLine();}//result.Remove(result.ToString().LastIndexOf('\n'), 1);reader.Close();response.Close();}catch (Exception ex){//throw (ex);throw new Exception(ex.Message + ",url:" + url + ",ftpUserID:" + ftpUserID + ",ftpPassword:" + ftpPassword);}//return result.ToString().Split('\n');return fileNameList;}/// <summary> /// 获取当前目录下文件列表(不包括文件夹) /// </summary> public List<string> GetFileListByFilePath(string filePath){var fileList = new List<string>();//var url = ftpURI + "//" + filePath.Trim().TrimStart('\\').TrimStart('/');var url = ftpURI + filePath.Trim();try{//var fileNameArray = GetFileList(ftpURI + "//" + filePath);var fileNameArray = GetFileList(url);if (fileNameArray != null && fileNameArray.Count > 0){fileList = fileNameArray;}}catch (Exception ex){//throw (ex);throw new Exception("url:" + url + ",errormsg:" + ex.Message);}return fileList;}/// <summary> /// 判断当前目录下指定的文件是否存在 /// </summary> /// <param name="RemoteFileName">远程文件名</param> public bool FileExist(string RemoteFileName){var fileList = GetFileList("*.*");foreach (string str in fileList){if (str.Trim() == RemoteFileName.Trim()){return true;}}return false;}/// <summary> /// 创建文件夹 /// </summary> public CommonResultModel<string> MakeDir(string ftpDirName){var resultModel = new CommonResultModel<string>();FtpWebRequest reqFTP;FtpWebResponse response = null;try{//resultModel.Msg = "MakeDir 1";reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpDirName));//resultModel.Msg = "MakeDir 2";reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;//创建文件夹reqFTP.UseBinary = true;reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);//resultModel.Msg = "MakeDir 3";using (response = (FtpWebResponse)reqFTP.GetResponse()){//resultModel.Msg = "MakeDir 4";Stream ftpStream = response.GetResponseStream();//resultModel.Msg = "MakeDir 5";ftpStream.Close();resultModel.IsSucceed = true;}//response.Close();}catch (Exception ex){//resultModel.Msg = ex.Message;throw ex;}finally{if (response != null){response.Close();}}return resultModel;}/// <summary>/// 判断文件夹是否存在/// </summary>/// <param name="ftpServer"></param>/// <param name="ftpFolder">文件夹</param>/// <param name="ftpUsername"></param>/// <param name="ftpPassword"></param>/// <returns></returns>public bool FolderExists(string ftpFolder, string findFolder){bool folderExists = false;string uploadUrl = string.Empty;try{var fileNameList = CommonData.FtpServer_MappingFile.GetAllList(ftpFolder.Trim());foreach (var item in fileNameList){//this.lbFtpFileNames.Items.Add(item);//CommonDefine.SaveWorkLogs("判断文件夹是否存在 获取FTP所有文件 " + ftpFolder + ":" + item);if (item.Contains(findFolder)){folderExists = true;//CommonDefine.SaveWorkLogs("判断文件夹是否存在 获取FTP所有文件 " + ftpFolder + ":" + item + "," + findFolder + "目录存在");break;}}}catch (WebException ex){var response = (FtpWebResponse)ex.Response;if (response.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable){folderExists = false;}else{// 处理其他异常}}return folderExists;}/// <summary> /// 获取指定文件大小 /// </summary> public long GetFileSize(string filename){FtpWebRequest reqFTP;long fileSize = 0;try{reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + filename));reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;reqFTP.UseBinary = true;reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();Stream ftpStream = response.GetResponseStream();fileSize = response.ContentLength;ftpStream.Close();response.Close();}catch (Exception ex){ }return fileSize;}/// <summary> /// 更改文件名 /// </summary> public void ReName(string currentFilename, string newFilename){FtpWebRequest reqFTP;try{reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + currentFilename));reqFTP.Method = WebRequestMethods.Ftp.Rename;reqFTP.RenameTo = newFilename;reqFTP.UseBinary = true;reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();Stream ftpStream = response.GetResponseStream();ftpStream.Close();response.Close();}catch (Exception ex){ }}/// <summary> /// 移动文件 /// </summary> public void MovieFile(string currentFilename, string newDirectory){ReName(currentFilename, newDirectory);}/// <summary> /// 切换当前目录 /// </summary> /// <param name="IsRoot">true:绝对路径 false:相对路径</param> public void GotoDirectory(string DirectoryName, bool IsRoot){if (IsRoot){ftpRemotePath = DirectoryName;}else{ftpRemotePath += DirectoryName + "/";}ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";}/// <summary> /// 删除ftpURI目录下指定的文件夹 /// </summary> public void DeleteDir(string dirName){FtpWebRequest reqFTP;try{reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + dirName));reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory;reqFTP.UseBinary = true;reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();Stream ftpStream = response.GetResponseStream();ftpStream.Close();response.Close();}catch (Exception ex){throw new Exception(ex.Message);}}}
相关文章:
C# ftp帮助类 项目实战优化版
上位机开发中有时要与客户的文件服务器进行数据交互。如Mapping文件下载。结果文件上传等。我在项目中就常用到。现在把项目实战代码进行分享一下。 功能列表:连接服务器,下载文件,上传文件,删除服务器文件,获取当前目…...
栈和队列相关|有效的括号|用队列实现栈|用栈实现队列|设计循环队列(C)
20. 有效的括号 判断左右括号是否匹配,匹配返回true,不匹配返回false 通过栈来实现,类型和顺序,数量都要匹配 控制数量通过size 每个右括号都要找最近的左括号去判断类型匹配不匹配,顺序匹配不匹配 最后来判断数量匹配…...
云原生后端开发教程
云原生后端开发教程 引言 随着云计算的普及,云原生架构逐渐成为现代软件开发的主流。云原生不仅仅是将应用部署到云上,而是一种构建和运行应用的方式,充分利用云计算的弹性和灵活性。本文将深入探讨云原生后端开发的核心概念、工具和实践&a…...
TortoiseSVN小乌龟下载安装(Windows11)
目录 TortoiseSVN 1.14.7工具下载安装 TortoiseSVN 1.14.7 工具 系统:Windows 11 下载 官网:https://tortoisesvn.subversion.org.cn/downloads.html如图选 TortoiseSVN 1.14.7 - 64 位 下载完成 安装 打开 next,next Browse…...
Android adb命令获取设备id
Android adb命令获取设备id 方式很多,以下均可获得Android device id: adb shell settings get secure android_id adb shell settings get secure android_id adb devices -l adb shell content query --uri content://settings/secure --where "…...
Skywalking教程一
Skywalking教程一 概述Skywalking功能特点: 概述 一个大型分布式系统架构,监控平台是必不可少的,常用的分布式系统监控平台有:SkyWalking和Prometheus。Skywalking是一款比较优秀的分布式系统监控平台,一款分布式系统…...
React中管理state的方式
使用useState 使用useReducer 既然已经有了useState,为什么还需要useReducer呢? 那么useReducer是如何将解决这些问题的呢? reducer是如何更新state的呢? reducer的工作方式非常类似JavaScript中的reduce方法,随着时…...
服务器数据恢复—RAID5阵列中部分成员盘重组RAID5阵列后如何恢复原raid5阵列数据?
服务器数据恢复环境: 一台服务器挂接一台存储,该存储中有一组由5块硬盘组建的RAID5阵列。 服务器故障: 存储raid5阵列中有一块硬盘掉线。由于RAID5的特性,阵列并没有出现问题。工作一段时间后,服务器出现故障ÿ…...
【Linux】文件切割排序 cut sort
文章目录 Linux文件切割命令:cut1. cut命令的基本用法2. cut命令的选项和参数3. cut命令的实际应用案例 Linux文件排序命令:sort1. sort命令的基本用法2. sort命令的选项和参数3. sort命令的实际应用案例 常见问题和解决方案1. cut和sort命令的联合使用2…...
零售EDI:HornBach EDI 项目案例
HornBach 是一家总部位于德国的家居和建筑材料零售商,成立于1968年。它以大型仓储式商店而闻名,提供广泛的产品,包括建筑材料、园艺、家居装饰和工具等。 近期我们帮助HornBach的供应商W公司成功实现了与HornBach的EDI直连,除了满…...
SpringBoot 集成RabbitMQ 实现钉钉日报定时发送功能
文章目录 一、RabbitMq 下载安装二、开发步骤:1.MAVEN 配置2. RabbitMqConfig 配置3. RabbitMqUtil 工具类4. DailyDelaySendConsumer 消费者监听5. 测试延迟发送 一、RabbitMq 下载安装 官网:https://www.rabbitmq.com/docs 二、开发步骤:…...
基于java ssm springboot女士电商平台系统源码+文档设计
基于java ssm springboot女士电商平台系统源码文档设计 🍅 作者主页 网顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制系统…...
Matlab数字信号处理——基于改进小波变换的图像去噪方法(7种去噪算法)
1.基于小波变换的阈值收缩法去噪 该方法利用小波变换分离出信号中的噪声成分,并通过设置合适的阈值对小波系数进行收缩,保留主要信息的同时,去除噪声。 %基于小波变换的阈值收缩法去噪算法 clear clc Iimread(nana.png); X im2double(I); …...
leetcode hot100【LeetCode 70. 爬楼梯】java实现
LeetCode 70. 爬楼梯 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意: 给定 n 是一个正整数。 示例 1: 输入:n 2 输出:2 解释&…...
Java异常2
异常抛出的两种形式: 系统隐式抛出;int n10/0;—隐式抛出一个异常;手动抛出异常:throw new Exception(); import java.util.InputMismatchException; import java.util.Scanner;public class Main {public static void main(Str…...
2024熵密杯初始题2
问题简要: 已知 counter 0x7501E6EA token 0xF4CE927C79B616E8E8F7223828794EEDF9B16591AE572172572D51E135E0D21A 伪造出另一个可以通过验证的counter和token。 给出token生成及验证代码如下: import binascii from gmssl import sm3# 读取HMAC ke…...
echarts属性之title
title 标题组件,包含主标题和副标题。 在 ECharts 2.x 中单个 ECharts 实例最多只能拥有一个标题组件。但是在 ECharts 3 中可以存在任意多个标题组件,这在需要标题进行排版,或者单个实例中的多个图表都需要标题时会比较有用。 例如下面不…...
VUE errolog, vue 错误集
I) installation As to command “npm install” on cmd or powershell, we must execute it under the program folder...
驱动开发系列13 - Linux tasklet用法介绍
一:概述 Tasklet 是 Linux 内核中的一种轻量级任务调度机制,通常用于在中断上下文中执行短小的任务。它们在软中断处理过程中被调用,允许将较长的处理工作延后到一个较低优先级的上下文中,以减少中断处理的延迟。Tasklet 的使用可以帮助开发者更好地管理系统资源,提高性能…...
redis实现分布式锁,go实现完整code
Redis分布式锁 Redis 分布式锁是一种使用 Redis 数据库实现分布式锁的方式,可以保证在分布式环境中同一时间只有一个实例可以访问共享资源。 实现机制 以下是实现其加锁步骤: 获取锁 在 Redis 中,一个相同的key代表一把锁。是否拥有这把锁&…...
解析日期、编码
解析日期 这里指的是将字符串或者object类型的日期,转换成panda或python的日期类型。 主要的是dtype的变化:object / str —> datetime64[ns] # modules well use import pandas as pd import numpy as np import seaborn as sns import datetime# …...
【Qt】QApplication::restoreOverrideCursor():恢复鼠标光标到原始状态的用法解析
restoreOverrideCursor() 是 Qt 中 QApplication 类提供的一个静态函数,用来恢复鼠标光标到应用程序之前设置的状态。 在 Qt 中,你可以使用 QApplication::setOverrideCursor() 来临时更改鼠标光标的外观。例如,当执行一些耗时操作时&#x…...
重生之“我打数据结构,真的假的?”--2.单链表(无习题)
C语言中的单链表总结 单链表是一种基础的数据结构,广泛应用于C语言编程中。它由节点组成,每个节点包含数据和指向下一个节点的指针。单链表的优点在于动态内存分配和高效的插入与删除操作。本文将详细探讨单链表的定义、基本操作、应用场景以及相关示例…...
【有啥问啥】视频插帧算法技术原理详解
视频插帧算法技术原理详解 引言 视频插帧(Video Interpolation)技术,作为计算机视觉领域的一项重要应用,旨在通过算法手段在已有的视频帧之间插入额外的帧,从而提升视频的帧率,使其看起来更加流畅。这一技…...
Leetcode148,109以及二者的合并 -> Tencent面试算法题 - 无序双向链表转BST
根源简述 这道题是腾讯在2024/8/30考的一道面试题,整体来说,难度不大,就是代码量稍稍有点儿大,让我们一起来看一下吧 题目描述 整数无序双向链表能否转BST(二叉搜索树),如果能,怎么转…...
【蓝桥杯选拔赛真题77】python计算小球 第十五届青少年组蓝桥杯python选拔赛真题 算法思维真题解析
目录 python计算小球 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python计算小球 第十五届蓝桥杯青少年组python比赛选拔赛真题 一、题目要…...
获取Hive表备注
DESCRIBE EXTENDED 表名;先获取Detailed Table Information这行的data_type字段数据,进行正则匹配,拿到表备注,如下: String str ReUtil.get("parameters:\\{(?!.*?\\().*transient_lastDdlTime.*?comment(.*?)\\}&quo…...
10.30学习
一、科学计数法 C语言中的科学计数法主要用于表示非常大或非常小的浮点数,它遵循以下格式: 1. E或e表示指数: 科学计数法中的E或e用来表示“指数”(Exponent)。例如, 1.23e4 或 1.23E4 表示 1.23 * 10^4…...
什么是栈溢出
一、什么是栈溢出 栈溢出(Stack Overflow)就是指在程序运行过程中,往栈里存放的数据超过了栈所能容纳的最大容量,从而导致程序出现异常行为的情况。这就好比一个箱子本来只能装一定数量的物品,硬要往里面塞更多的东西&…...
在linux中arm-linux-gcc和/usr/bin/gcc有啥区别
在Linux中,arm-linux-gcc和/usr/bin/gcc都是编译器,但它们之间存在显著的区别,主要体现在编译目标、使用场景以及编译生成的二进制文件的可执行性上。而软链接则是Linux文件系统中的一种特殊文件类型,用于创建一个文件的别名。 a…...
kaalus wordpress/竞价交易
HTTP Client - IntelliJ IDEs Plugin | Marketplace...
浙江网站建设公司推荐/友情网站
匹配中文字符的正则表达式: [u4e00-u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符 ( 包括汉字在内 ) : [^x00-xff] 评注:可以用来计算字符串的长度(一个双字节字符长度计 2…...
网站开发必学的技巧有哪些/新闻今天最新消息
决策边界SVM损失函数 回顾一下前面博客中提到的决策边界,在二维的平面上,决策边界即超平面是一条直线。 现在假设有N个样本点,每个样本点表示为(xi_ii, yiy_iyi),xi_ii是特征向量。为了便于理解,所以假设每个样…...
湖南省人民政府官方网/站长工具seo综合查询访问
本篇文章想要更好的阅读体验可以👉查看原文 之前看到过一个梗 “ 正经人谁写日记啊?”,然后总觉得这话不对劲啊!?毕竟我也有写日记的习惯 于是最近才去把电影翻出来看了,实际上完整对话是讽刺写日记给别人…...
在线销售型的网站/seo新方法
第12章杆件的强度、刚度计算材料力学习题第12章12-1 一桅杆起重机,起重杆AB的横截面积如图所示。钢丝绳的横截面面积为10mm2。起重杆与钢丝的许用力均为,试校核二者的强度。习题2-1图 习题12-2图12-2 重物F130kN悬挂在由两根圆杆组成的吊架上。AC是钢杆&…...
博罗企业网站建设/广州seo推广营销
在MySQL中, 如果显示的输入密码去登录的话, 就会有一个Warning显示出来, 提醒这种使用方式会不安全, 信息如下: [Warning] Using a password on the command line interface can be insecure. 如何去除,三种方式: 第一种方式: mysql_config_editor mys…...