文件比较和文件流
文件比较和文件流
- 一、文本比较工具 diff
- 1.基本用法
- 1.1输出格式
- 2.常用选项
- 二、文件流
- 1.文件的打开模式
- 2.文件流的分类
- ifstream
- ofstream
- fstrem
- 区别
- 3.文件流的函数
- 1. 构造函数
- 2. is_open 用于判断文件是否打开
- 3. open
- 4. getline
- 5. close
- 6. get()
- 7. read
- 8. write
- 9. put
- 10. gcount
- 11. seekg
- 12. peek
- 13. ignore
- 14. 文件流状态检查函数
一、文本比较工具 diff
- diff 是 文件和内容比较工具,主要用于比较文件的差异、跟踪修改,以及生成补丁。这类工具可以比较文本文件、二进制文件、目录结构等,广泛用于开发、配置管理和系统运维中
1.基本用法
- diff file1 file2 比较两个文件的差异
- 输出:显示如何将 文件1 转换为 文件2,以最小的编辑操作实现
1.1输出格式
diff 的输出结果以 行号 和 更改说明 表示
- <:表示 文件1 中的内容。表示第一个文件独有的行
- >:表示 文件2 中的内容。表示第二个文件独有的行
[行号]动作[行号]
< 文件1中的行
---
> 文件2中的行动作:a(add):添加操作,将内容从 文件2 添加到 文件1。d(delete):删除操作,从 文件1 中删除内容。c(change):修改操作,将 文件1 的内容替换为 文件2 的内容。
2.常用选项
-u:生成统一格式(unified format)的输出,更易读
-r:递归比较目录
-i:忽略大小写差异
-w:忽略空白字符差异
-b:忽略空行差异
-y:以并排显示模式输出,其中| 表示此行有差异
--suppress-common-lines:隐藏相同的行,
可以生成补丁文件用于修改diff -u file1 file2 > patch.diff
#应用补丁 //file2是新文件,通过patch.diff的修改,给了file1patch file1.txt < patch.diff
#撤销补丁,使用R关键字patch -R file1.txt < patch.diff
二、文件流
- C++的文件流
- 头文件<fstream>
- 允许程序通过文件进行输入(读取数据)和输出(写入数据)。它是 I/O 流库的一部分,主要通过 fstream 类和相关子类来实现。
1.文件的打开模式
- 它们之间可以组合使用
打开模式 | 描述 |
---|---|
std::ios::in | 打开文件以进行输入(读取)(默认用于 ifstream)。如果文件不存在,则操作失败。 |
std::ios::out | 打开文件以进行输出(写入)(默认用于 ofstream)。如果文件不存在,则创建新文件;如果存在,则清空内容。 |
std::ios::app | 打开文件以追加内容到文件末尾。写入的数据保留原内容,不会清空文件。 |
std::ios::ate | 打开文件,并将文件指针定位到文件末尾(可同时进行读写操作)。 |
std::ios::trunc | 如果文件已存在,清空其内容(默认用于 ofstream)(仅在与 std::ios::out 结合使用时生效)。 |
std::ios::binary | 以二进制模式打开文件,而非文本模式。数据读写时不会进行格式转换。 |
std::ios::in | std::ios::out | 以读写模式打开文件,允许同时进行读取和写入操作。 |
std::ios::out | std::ios::app | 打开文件以追加模式写入,保留文件原内容,仅在末尾追加。 |
std::ios::in | std::ios::binary | 以二进制模式打开文件并读取数据。 |
2.文件流的分类
ifstream
- 输入文件流,用于从文件中读取数据。
ofstream
- 输出文件流,用于向文件中写入数据。
fstrem
- 文件流,同时支持从文件读取数据和向文件写入数据(ifstream 和 ofstream 的结合)。
区别
- 虽然 std::fstream 是通用的文件流,可以替代 std::ifstream 和 std::ofstream,但后两者的存在有以下好处
- 明确性:更清楚地表达代码的意图。
- 简洁性:减少代码复杂度,减少模式设置的错误。
- 效率性:为单一任务设计,内部更优化。
- 降低误用风险:避免由于未正确指定模式导致的运行时错误。
3.文件流的函数
1. 构造函数
explicit ifstream(const char* filename, ios_base::openmode mode = ios_base::in);
explicit ofstream(const char* filename, ios_base::openmode mode = ios_base::out);
explicit fstream(const char* filename, ios_base::openmode mode = ios_base::in | ios_base::out);示例std::ofstream outfile("example.txt", std::ios::out); // ofstream outfile("example.txt"); /*std::ofstream outfile;outfile.open("example.txt",std::ios::out);//outfile.open("example.txt");*/std::ifstream infile("example.txt", std::ios::in); // ifstream infile("example.txt"); /*std::ifstream infile;infile.open("example.txt", std::ios::in); // infile.open("example.txt");*/std::fstream file("example.txt", std::ios::in | std::ios::out); // fstream file("example.txt", ios::in | ios::out); /*fstream 必须显式指定打开模式,不能省略 ios::in | ios::out。std::fstream file;file.open("example.txt", std::ios::in | std::ios::out); */
2. is_open 用于判断文件是否打开
bool is_open() const;
返回值返回 true:文件成功打开且未关闭返回 false:文件未打开或已关闭用法// 场景1:检查文件是否成功打开if (!infile.is_open()) {std::cerr << "无法打开文件" << std::endl;return -1;
}// 场景2:循环读取多个文件
std::vector<std::string> filenames = {"file1.txt", "file2.txt", "file3.txt"};
for (const auto& filename : filenames) {std::ifstream file(filename);if (!file.is_open()) {std::cerr << "无法打开文件: " << filename << std::endl;continue; // 跳过这个文件,继续处理下一个}// 处理文件...file.close();
}
3. open
- 类似于标准文件打开
void open(const char* filename, ios_base::openmode mode = ios_base::in | ios_base::out);
// 或
void open(const string& filename, ios_base::openmode mode = ios_base::in | ios_base::out);打开模式有如上表
示例fstream file;file.open("test.txt", ios::out | ios::in);
4. getline
- getline函数用于从输入流中读取一行文本
// 形式1:从输入流读取到string
istream& getline(istream& is, string& str, char delim = '\n');// 形式2:从输入流读取到字符数组
istream& getline(istream& is, char* str, streamsize n, char delim = '\n');
参数说明is: 输入流(如cin或文件流)str: 存储读取内容的字符串或字符数组delim: 分隔符(默认为换行符'\n')n: 最多读取的字符数(用于字符数组形式)
示例:// 1. 从标准输入读取一行string line;getline(std::cin, line);// 2. 使用自定义分隔符string data;getline(cin, data, ','); // 以逗号为分隔符// 3. 从文件读取所有行ifstream file("test.txt");string textLine;while (getline(file, textLine)) {cout << textLine << endl;}// 返回引用允许我们进行链式操作
string line1, line2;
getline(getline(cin, line1), line2); // 连续读取两行
5. close
- 关闭文件流
#include <fstream>
using namespace std;int main() {ofstream file("test.txt");// 文件操作...file.close(); // 关闭文件return 0;
}
void processFile() {fstream file("test.txt"); // 打开文件// 文件操作...// 不需要显式调用close()// 当file离开作用域时会自动关闭
} // 自动调用析构函数,关闭文件
6. get()
// 主要的几种形式:
int get(); // 形式1:读取单个字符
istream& get(char& ch); // 形式2:读取到字符引用
istream& get(char* str, streamsize n); // 形式3:读取到字符数组
istream& get(char* str, streamsize n, char delim); // 形式4:带分隔符读取示例// 逐字符读取文件
void readFileChar() {ifstream file("test.txt");char ch;while (file.get(ch)) {cout << ch;}file.close();
}// 读取到特定字符为止
void readUntilChar(char delim) {char buffer[1024];cin.get(buffer, sizeof(buffer), delim);cout << "Read: " << buffer << endl;
}// 处理二进制数据
void processBinaryData() {ifstream file("data.bin", ios::binary);char byte;while (file.get(byte)) {// 处理每个字节processBytes(byte);}
}
// 高效的文件读取
void efficientReading() {ifstream file("largefile.txt");constexpr size_t BUFFER_SIZE = 4096;char buffer[BUFFER_SIZE];while (file) {file.get(buffer, BUFFER_SIZE);// 处理buffer中的数据}
}
- get()函数保留分隔符在流中
- 读取字符数组时要注意留出空间给结束符’\0’
7. read
- read 函数是一个重要的成员函数,用于以 二进制模式从文件中读取固定数量的字节。它非常适合处理 非文本文件(如图片、音频)或需要高效读取大量数据的场景
istream& read(char* buffer, streamsize count);char* buffer缓冲区的大小必须至少为 count,否则可能导致溢出。一个指向目标缓冲区的指针,读取的数据将存储在这个缓冲区中。streamsize count表示要从文件中读取的字节数。类型为 std::streamsize(通常是一个有符号整数类型)。
返回值返回对输入流对象的引用(istream&),支持链式操作。如果读取成功,流的状态仍然有效;如果读取失败(如到达文件末尾),流的状态会变为 "失败状态"。
示例int main() {ifstream file("test.bin", ios::binary);char buffer[100];// 读取100字节file.read(buffer, 100);// 检查实际读取的字节数cout << "读取了 " << file.gcount() << " 字节" << endl;file.close();return 0;
}
读取结构体struct Student {char name[50];int age;double score;
};void readStudentData() {ifstream file("students.dat", ios::binary);Student student;// 读取整个结构体file.read(reinterpret_cast<char*>(&student), sizeof(Student));cout << "姓名: " << student.name << endl;cout << "年龄: " << student.age << endl;cout << "分数: " << student.score << endl;
}
// 读取大文件
void readLargeFile(const string& filename) {ifstream file(filename, ios::binary);constexpr size_t BUFFER_SIZE = 4096;char buffer[BUFFER_SIZE];while (file) {file.read(buffer, BUFFER_SIZE);streamsize bytesRead = file.gcount();if (bytesRead > 0) {// 处理读取的数据processData(buffer, bytesRead);}}
}// 读取数组
void readArray() {ifstream file("numbers.dat", ios::binary);int numbers[100];file.read(reinterpret_cast<char*>(numbers), sizeof(int) * 100);
}// 读取固定大小的记录
struct Record {int id;char data[256];
};void readRecord(int position) {ifstream file("records.dat", ios::binary);Record record;// 定位到特定记录file.seekg(position * sizeof(Record));file.read(reinterpret_cast<char*>(&record), sizeof(Record));
}
8. write
- write() 函数是一个用于二进制写入的低级函数,它属于 ostream 类(因此也被 ofstream 继承)。
ostream& write(const char* buffer, streamsize count);
参数buffer:指向要写入数据的字符缓冲区count:要写入的字节数返回对流对象的引用,支持链式操作按照原始二进制格式写入,不进行任何转换
示例
//写入字符串
ofstream file("test.bin", ios::binary);
const char* str = "Hello";
file.write(str, 5); // 写入5个字节//写入数值
int number = 42;
file.write(reinterpret_cast<const char*>(&number), sizeof(number));//写入结构体
struct Person {char name[20];int age;
};Person person = {"John", 25};
file.write(reinterpret_cast<const char*>(&person), sizeof(Person));//写入数组
int arr[] = {1, 2, 3, 4, 5};
file.write(reinterpret_cast<const char*>(arr), sizeof(arr));//图像文件处理class ImageProcessor {struct BMPHeader {char signature[2];uint32_t fileSize;uint32_t reserved;uint32_t dataOffset;// ... 其他头部信息};public:static void convertToBW(const std::string& filename) {std::fstream file(filename, std::ios::binary | std::ios::in | std::ios::out);BMPHeader header;file.read(reinterpret_cast<char*>(&header), sizeof(header));// 定位到图像数据file.seekg(header.dataOffset);std::vector<unsigned char> pixels;pixels.resize((header.fileSize - header.dataOffset));file.read(reinterpret_cast<char*>(pixels.data()), pixels.size());// 转换为黑白for (size_t i = 0; i < pixels.size(); i += 3) {unsigned char gray = (pixels[i] + pixels[i+1] + pixels[i+2]) / 3;pixels[i] = pixels[i+1] = pixels[i+2] = gray;}// 写回文件file.seekp(header.dataOffset);file.write(reinterpret_cast<char*>(pixels.data()), pixels.size());}
};
9. put
- put() 函数用于写入单个字符,属于 ostream 类
ostream& put(char ch);
参数ch:要写入的字符返回对流对象的引用,支持链式操作
示例
//写入单个字符
ofstream file("test.txt");
file.put('A');//链式写入多个字符
file.put('H').put('i').put('!');//配合循环使用
const char* str = "Hello";
for(int i = 0; str[i]; i++) {file.put(str[i]);
}//写入特殊字符
file.put('\n'); // 换行符
file.put('\t'); // 制表符
10. gcount
- gcount() 函数返回上一次输入操作读取的字符数,属于 istream 类
treamsize gcount() const;
参数返回值:返回上一次读取操作实际读取的字符数
示例
//基本使用
ifstream file("test.txt");
char buffer[100];
file.read(buffer, 100);
cout << "读取了 " << file.gcount() << " 个字符" << endl;//配合getline使用
string line;
getline(file, line);
cout << "本行读取了 " << file.gcount() << " 个字符" << endl;//错误检查
if (file.read(buffer, 100) && file.gcount() > 0) {cout << "成功读取数据" << endl;
}//读取整个文件
ifstream file("data.bin", ios::binary);
vector<char> data;
while (file.read(buffer, sizeof(buffer))) {data.insert(data.end(), buffer, buffer + file.gcount());
}
11. seekg
seekg() 函数用于设置输入流的读取位置,属于 istream 类
istream& seekg(streampos pos); // 绝对定位
istream& seekg(streamoff off, ios_base::seekdir way); // 相对定位
参数pos:新的绝对位置off:相对偏移量way:移动方向(ios::beg开头,ios::cur当前,ios::end末尾)
示例
//移动到文件开头
ifstream file("test.bin", ios::binary);
file.seekg(0, ios::beg);//移动到文件末尾
file.seekg(0, ios::end);//获取文件大小
file.seekg(0, ios::end);
streampos fileSize = file.tellg();
file.seekg(0, ios::beg);//跳过文件头
struct Header {int version;int dataSize;
};
file.seekg(sizeof(Header), ios::beg);//读取文件中间的数据块
file.seekg(1024, ios::beg); // 跳过前1024字节
char buffer[256];
file.read(buffer, 256);//在文件中来回移动
int pos = file.tellg(); // 保存当前位置
file.seekg(100, ios::cur); // 向前移动100字节
file.seekg(pos); // 返回之前的位置
12. peek
peek() 函数用于查看输入流中的下一个字符,但不从流中提取它
int peek();
返回值成功:返回下一个要读取的字符失败:返回 EOF不移动流位置指针示例
//基本使用
ifstream file("test.txt");
char next = file.peek();
cout << "下一个字符是: " << next << endl;//用于判断行尾
while (file.peek() != EOF && file.peek() != '\n') {char ch;file.get(ch);cout << ch;
}//检查数字开头
if (isdigit(file.peek())) {int number;file >> number;
}//格式化读取示例
class Parser {
public:static void parseData(istream& input) {while (input.peek() != EOF) {// 跳过空白字符while (isspace(input.peek())) {input.ignore();}if (isdigit(input.peek())) {int num;input >> num;cout << "Found number: " << num << endl;}else if (isalpha(input.peek())) {string word;input >> word;cout << "Found word: " << word << endl;}}}
};
13. ignore
- ignore() 函数用于跳过输入流中的字符
istream& ignore(streamsize n = 1, int delim = EOF);
参数n: 要忽略的最大字符数,默认为1delim: 分隔符,读到这个字符就停止,默认为EOF返回对流的引用示例
//忽略单个字符
ifstream file("test.txt");
file.ignore(); // 跳过一个字符//忽略整行
file.ignore(numeric_limits<streamsize>::max(), '\n');//跳过特定字符前的所有内容
file.ignore(numeric_limits<streamsize>::max(), ':');//清除缓冲区
cin.ignore(numeric_limits<streamsize>::max(), '\n');//处理CSV文件示例
class CSVParser {
public:static vector<string> parseLine(istream& input) {vector<string> fields;string field;while (input.peek() != EOF && input.peek() != '\n') {if (input.peek() == ',') {input.ignore(); // 跳过逗号fields.push_back(field);field.clear();}else {char ch;input.get(ch);field += ch;}}if (!field.empty()) {fields.push_back(field);}input.ignore(); // 跳过换行符return fields;}
};//配合peek()实现高级解析
class DataParser {
public:static void parseStructuredData(istream& input) {while (input.peek() != EOF) {// 跳过注释行if (input.peek() == '#') {input.ignore(numeric_limits<streamsize>::max(), '\n');continue;}// 处理数据行string data;getline(input, data);processData(data);}}static void skipWhitespace(istream& input) {while (input.peek() != EOF && isspace(input.peek())) {input.ignore();}}static string readToken(istream& input) {skipWhitespace(input);string token;while (input.peek() != EOF && !isspace(input.peek())) {char ch;input.get(ch);token += ch;}return token;}
};
14. 文件流状态检查函数
- 返回值都是bool类型
good() 检查流是否处于良好状态(没有错误)。
eof() 检查是否到达文件末尾。
fail() 检查是否发生了文件流错误(如文件打开失败)。
bad() 检查是否发生了严重错误(如硬件故障)。
clear() 清除流的所有错误状态标志。
//基本检查
ifstream file("data.txt");
if (file.good()) {cout << "文件流状态正常" << endl;
}
//读取整个文件
ifstream file("input.txt");
string content;
while (!file.eof()) {char ch;file.get(ch);if (!file.eof()) { // 重要:避免重复最后一个字符content += ch;}
}
//文件打开检查
ifstream file("config.txt");
if (file.fail()) {cerr << "无法打开配置文件" << endl;return;
}//类型转换错误检查
int number;
cin >> number;
if (cin.fail()) {cerr << "输入的不是有效数字" << endl;cin.clear(); // 清除错误状态cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 清除错误输入
}
//硬件错误检查
ofstream file("data.dat", ios::binary);
file.write(data, size);
if (file.bad()) {cerr << "发生严重的I/O错误" << endl;return;
}
//基本使用
ifstream file("data.txt");
if (file.fail()) {file.clear(); // 清除错误状态
}//恢复流状态
class StreamResetter {
public:static void resetStream(istream& stream) {stream.clear(); // 清除所有错误标志stream.seekg(0, ios::beg); // 重置读取位置}
};
相关文章:
文件比较和文件流
文件比较和文件流 一、文本比较工具 diff1.基本用法1.1输出格式 2.常用选项 二、文件流1.文件的打开模式2.文件流的分类ifstreamofstreamfstrem区别 3.文件流的函数1. 构造函数2. is_open 用于判断文件是否打开3. open4. getline5. close6. get()7. read8. write9. put10. gcou…...
unity如何让一个物体拥有按钮功能
在 Unity 中,要让一个物体(例如一个 3D 模型、UI 元素或其他对象)变成一个按钮,你需要为它添加交互功能。这通常意味着让物体能够响应点击事件,像 UI 按钮那样触发某些行为。对于 3D 物体,可以通过 射线检测…...
【RISC-V CPU Debug 专栏 1 -- RISC-V debug 规范】
文章目录 RISC-V Debug调试用例支持的功能限制和不包括的内容RISC-V 调试架构的主要组件用户与调试主机调试翻译器调试传输硬件调试传输模块(DTM)调试模块(DM)调试功能触发模块版本介绍RISC-V Debug RISC-V 调试规范为 RISC-V 处理器提供了一套标准化的调试接口和功能,旨…...
【论文阅读】Federated learning backdoor attack detection with persistence diagram
目的:检测联邦学习环境下,上传上来的模型是不是恶意的。 1、将一个模型转换为|L|个PD,(其中|L|为层数) 如何将每一层转换成一个PD? 为了评估第𝑗层的激活值,我们需要𝑐个输入来获…...
IDEA Maven 打包找不到程序包错误或找不到符号,报错“程序包不存在“
参考文章:https://blog.csdn.net/yueeryuanyi/article/details/14211090 问题:IDEA Maven 打包找不到程序包错误或找不到符号,报错“程序包不存在“编译都没问题 解决思路 – >【清除缓存】 1. 强制刷新Maven缓存 选择 Maven 标签,Exe…...
MySQL数据库做题笔记
题目链接https://leetcode.cn/problems/invalid-tweets-ii/description/https://leetcode.cn/problems/invalid-tweets-ii/description/ # Write your MySQL query statement below SELECT tweet_id FROM Tweets where LENGTH(content)>140 OR (length(content)-length(rep…...
100个python经典面试题详解(新版)
应老粉要求,每晚加餐一个最新面试题 包括Python面试中常见的问题,涵盖列表、元组、字符串插值、比较操作符、装饰器、类与对象、函数调用方式、数据结构操作、序列化、数据处理函数等多个方面。 旨在帮助数据科学家和软件工程师准备面试或提升Python技能。 7、Python面试题…...
Leetcode3232:判断是否可以赢得数字游戏
题目描述: 给你一个 正整数 数组 nums。 Alice 和 Bob 正在玩游戏。在游戏中,Alice 可以从 nums 中选择所有个位数 或 所有两位数,剩余的数字归 Bob 所有。如果 Alice 所选数字之和 严格大于 Bob 的数字之和,则 Alice 获胜。 如…...
Python 爬虫实战基于 Class 的天气查询与反爬虫练习
需求: 要实现一个简单的天气查询爬虫,使用 requests 库来获取网页内容,使用 BeautifulSoup 来解析网页并提取天气信息。以下是一个基本示例,展示了如何抓取天气信息并输出当天的温度和天气状况。 以下是使用 class 类方式实现带有…...
C语言——库函数
常用的函数 https://cplusplus.com/reference/ 没事儿多看看 1 数学函数 #include <math.h> #include <stdio.h> int main() {printf("%lf\n", sqrt(4));//开平方根——>double类型printf("%lf\n", pow(2, 10));//求几次方的——>do…...
软件测试丨Pytest 第三方插件与 Hook 函数
Pytest不仅是一个用于编写简单和复杂测试的框架,还有大量的第三方插件以及灵活的Hook函数供我们使用,这些功能大大增强了其在软件测试中的应用。通过使用Pytest,测试开发变得简便、安全、高效,同时也能帮助我们更快地修复Bug&…...
[ACTF2020 新生赛]BackupFile--详细解析
信息搜集 让我们寻找源文件,目录扫描: 找到了/index.php.bak文件,也就是index.php的备份文件。 后缀名是.bak的文件是备份文件,是文件格式的扩展名。 我们访问这个路径,就会直接下载该备份文件。 我们把.bak后缀删掉…...
ElasticSearch的学习
介绍 ElasticSearch(简称ES)是一个开源的分布式搜索和数据分析引擎,是用Java开发并且是当前最流行的开源的企业级搜索引擎,能够达到近实时搜索,它专门设计用于处理大规模的文本数据和实现高性能的全文检索。 Elastic…...
机器学习6-梯度下降法
梯度下降法 目的 梯度下降法(Gradient Descent)是一个算法,但不是像多元线性回归那样是一个具体做回归任务的算法,而是一个非常通用的优化算法来帮助一些机器学习算法求解出最优解的,所谓的通用就是很多机器学习算法都是用它,甚…...
算法之旅:LeetCode 拓扑排序由简入繁完全攻略
前言 欢迎来到我的算法探索博客,在这里,我将通过解析精选的LeetCode题目,与您分享深刻的解题思路、多元化的解决方案以及宝贵的实战经验,旨在帮助每一位读者提升编程技能,领略算法之美。 👉更多高频有趣Lee…...
vue3项目中使用星火API
在node环境epxress中使用讯飞ai接口进行二次封装,通过ai对话回复提取,获得ai提取的文章摘要 本文章只是简单使用,更复杂功能比如调用星火API制作对话机器人可以查看文档,对于初次使用星火AI接口或许有帮助 讯飞星火大模型API-大模…...
蓝桥杯第 23 场 小白入门赛
一、前言 好久没打蓝桥杯官网上的比赛了,回来感受一下,这难度区分度还是挺大的 二、题目总览 三、具体题目 3.1 1. 三体时间【算法赛】 思路 额...签到题 我的代码 // Problem: 1. 三体时间【算法赛】 // Contest: Lanqiao - 第 23 场 小白入门赛 …...
Cause: java.sql.SQLException: No value specified for parameter 4
问题 执行更新sql时报错,异常栈如下 org.springframework.jdbc.BadSqlGrammarException: ### Error updating database. Cause: java.sql.SQLException: No value specified for parameter 4 ### The error may exist in com/my/mapper/MyMapper.java (best gue…...
第五课 Unity资源导入工作流效率优化(AssetGraph工具)
上期我们学习了简单的animation动画的优化,接下来我们继续资源导入效率的优化 工程目录 首先我们来学习一下工程目录结构及用途 Asset文件夹:用来储存和重用的项目资产 Library文件夹:用来储存项目内部资产数据信息的目录 Packages文件夹…...
create-vue创建vue3项目
create-vue是Vue官方新的脚手架工具 前提条件: 已安装16.0或更高版本的Node.js (node -v查看) 创建一个Vue应用 npm init vuelatest 这一指令会帮我们安装并执行create-vue cd vue-project npm install —— 安装依赖 npm run dev...
27 基于51单片机的方向盘模拟系统
目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机,采用两个MPX4115压力传感器作为两路压力到位开关电路, 采用滑动变阻器连接数模转换器模拟重力加速度传感器电路; 一个按键控制LED灯的点亮与…...
HarmonyOS
UIAbility UIAbility 组件是一种包含UI的应用组件,主要用于和用户交互 设计理念:原生支持应用组件的跨端迁移和多端协同、支持多设备和多窗口的形态 UIAbility组件是系统调度的基本单位,为应用提供绘制界面的窗口。 /** 为使应用能够正常使用…...
字符串处理(二)
第1题 篮球比赛 查看测评数据信息 学校举行篮球比赛,请设计一个计分系统统计KIN、WIN两队分数,并输出分数和结果! 如果平分就输出‘GOOD’,否则输出获胜队名! 输入格式 输入数据共n1行, 第1行n…...
达梦数据库文件故障的恢复方法
目录 1、概述 1.1 概述 1.2 环境介绍 2、使用备份集的恢复方法 2.1 实验准备 2.2 误删除“用户表空间数据文件” 2.3 误删除SYSTEM.DBF 2.4 误删除ROLL.DBF 2.5 REDO日志文件 3、无备份集的恢复方法 3.1 误删除“表空间数据文件” 3.2误删除控制文件 3.3 误删除RO…...
Redis(5):哨兵
一、作用和架构 1. 作用 在介绍哨兵之前,首先从宏观角度回顾一下Redis实现高可用相关的技术。它们包括:持久化、复制、哨兵和集群,其主要作用和解决的问题是: 1)持久化:持久化是最简单的高可用方法(有时甚…...
准确--在 AlmaLinux 9.2 上快速搭建 FTP 服务器
FTP 服务器配置与验证完整步骤 以下内容是针对在 192.168.6.101 配置 FTP 服务器,端口为 59999 的完整详细操作步骤,包括配置与验证。每个步骤都附有详细注释。 配置 FTP 服务器 1. 安装 vsftpd 根据系统类型,执行以下命令安装 FTP 服务&a…...
Monitor 显示器软件开发设计入门二
基础篇--显示驱动方案输出接口介绍 写在前面:首先申明,这篇文章是写给那些初入显示器软件行业的入门者,或是对显示器没有基本知识的小白人员。如您是行业大咖大神,可以绕行,可看后期进阶文章。 上篇介绍了输入接口及相…...
MySQL 数据库学习教程一:开启数据库探索之旅
在当今数字化时代,数据已然成为企业和组织最为宝贵的资产之一。而数据库管理系统则是存储、管理和操作这些数据的核心工具。MySQL 作为一款广泛应用的开源关系型数据库管理系统,以其可靠性、高性能和易用性而备受青睐。如果你渴望踏入数据库领域…...
课程答疑微信小程序设计与实现
私信我获取源码和万字论文,制作不易,感谢点赞支持。 课程答疑微信小程序设计与实现 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了课程答疑微信小程序设计与实现的开发全过程。通过分析…...
基于yolov8、yolov5的铝材缺陷检测识别系统(含UI界面、训练好的模型、Python代码、数据集)
摘要:铝材缺陷检测在现代工业生产和质量管理中具有重要意义,不仅能帮助企业实时监控铝材质量,还为智能化生产系统提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的铝材缺陷检测模型,该模型使用了大量包含…...
docker 僵尸进程问题
docker僵尸进程 子进程结束后,父进程没有回收该进程资源(父进程可能没有wait),子进程残留资源存放与内核中,就变为僵尸进程(zombie) 场景分析:python脚本A中执行B应用,将A部署在docker中&#…...
Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:电影院后台管理系统(前后端源码 + 数据库 sql 脚本)
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 项目介绍 2.0 用户登录功能 3.0 用户管理功能 4.0 影院管理功能 5.0 电影管理功能 6.0 影厅管理功能 7.0 电影排片管理功能 8.0 用户评论管理功能 9.0 用户购票功…...
webpack5 的五大核心配置(二)
webpack主要构成部分: entry 入口output 出口loaders 转化器plugins 插件mode 模式devServer 开发服务器 webpack.config.js 配置文件基本格式 module.exports{//入口文件entry:{},//出口文件output:{},//module rules loadersmodule{};//插件plugins:[],//开发…...
Python语法基础(四)
🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 高阶函数之map 高阶函数就是说,A函数作为B函数的参数,B函数就是高阶函数 map:映射 map(func,iterable) 这个是map的基本语法,…...
UnityShader——初级篇之开始Unity Shader学习之旅
开始Unity Shader学习之旅 一个最简单的顶点/片元着色器顶点/片元着色器的基本结构模型数据从哪里来顶点着色器和片元着色器之间如何通信如何使用属性 强大的援手:Unity 提供的内置文件和变量内置的包含文件内置的变量 Unity 提供的 Cg/HLSL 语义什么是语义Unity 支…...
Burp入门(6)-自动化漏洞测试理论
声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章 声明:本文主要用作技术分享,所有内容仅供参考。任何使用或依赖于本文信息所造成的法律后果均与本人无关。请读者自行判断风险,并遵循相关法律法规。 感谢泷…...
【git】git 客户端设置本地缓冲区大小
文章目录 1. 报错2. 解决:增加本地缓冲区 1. 报错 git -c core.quotepathfalse -c log.showSignaturefalse push --progress --porcelain origin refs/heads/master:master Enumerating objects: 17, done. Counting objects: 5% (1/17) Counting objects: 11% …...
Xcode——LLDB Debugger 与断点调试学习
Xcode——LLDB Debugger 与断点调试学习 文章目录 Xcode——LLDB Debugger 与断点调试学习前言介绍打开LLDB命令helpprintexpression 断点调试异常断点——Exception Breakpoint标志断点——Symbolic Breakpointwatchpointset 断点行为condition条件判断 最后参考文章 前言 在…...
linux安全管理-系统环境安全
1 历史命令设置 1、检查内容 检查操作系统的历史命令设置。 2、配置要求 建议操作系统的历史命令设置。 3、配置方法 编辑/etc/profile 文件,配置保留历史命令的条数 HISTSIZE 和保留历史命令的记录文件大小 HISTFILESIZE,这两个都设置为 5。 配置方法如…...
【Maven】依赖冲突如何解决?
准备工作 1、创建一个空工程 maven_dependency_conflict_demo,在 maven_dependency_conflict_demo 创建不同的 Maven 工程模块,用于演示本文的一些点。 什么是依赖冲突? 当引入同一个依赖的多个不同版本时,就会发生依赖冲突。…...
学习视频超分辨率扩散模型中的空间适应和时间相干性(原文翻译)
文章目录 摘要1. Introduction2. Related Work3. Our Approach3.1. Video Upscaler3.2. Spatial Feature Adaptation Module3.3. Temporal Feature Alignment Module3.4. Video Refiner3.5. Training Strategy 4. Experiments4.1. Experimental Settings4.2. Comparisons with …...
MFC工控项目实例三十四模拟量实时监控数字显示效果
点击监控按钮,对选中模拟量用数字显示效果实时显示数值。 SenSet.cpp中相关代码 UINT m_nCounterID_1[6] { IDC_STATIC0,IDC_STATIC1,IDC_STATIC2,IDC_STATIC3,IDC_STATIC4,IDC_STATIC5,};UINT m_nCounterID_2[7] { IDC_STATIC7,IDC_STATIC8,IDC_STATIC9,IDC_S…...
Z2400032基于Java+Mysql+SSM的校园在线点餐系统的设计与实现 代码 论文
在线点餐系统 1.项目描述2. 技术栈3. 项目结构后端前端 4. 功能模块5. 项目实现步骤注意事项 6.界面展示7.源码获取 1.项目描述 本项目旨在开发一个校园在线点餐系统,通过前后端分离的方式,为在校学生提供便捷的餐厅点餐服务,同时方便餐厅和…...
Linux Deploy安装Debian桌面
下载安装Linux Deploy 下载地址 https://github.com/lateautumn233/Linuxdeploy-Pro/releases/download/3.1.0/app-debug.apk 配置 发行版本:Debian架构:arm64发行版版本:bookworm源地址:http://mirrors.aliyun.com/debian/安装…...
C语言数据相关知识:静态数据、越界与溢出
1、静态数组 在 C 语言中,数组一旦被定义后,占用的内存空间就是固定的,容量就是不可改变的,既不能在任何位置插入元素,也不能在任何位置删除元素,只能读取和修改元素,我们将这样的数组称为静态…...
纯Go语言开发人脸检测、瞳孔/眼睛定位与面部特征检测插件-助力GoFly快速开发框架
前言 开发纯go插件的原因是因为目前 Go 生态系统中几乎所有现有的人脸检测解决方案都是纯粹绑定到一些 C/C 库,如 OpenCV 或 dlib,但通过 cgo 调用 C 程序会引入巨大的延迟,并在性能方面产生显著的权衡。…...
华为ACL应用笔记
1、基本ACL 2000-2999 基本ACL(Access Control List,访问控制列表)是一种网络安全技术,它根据源IP地址、分片信息和生效时间段等信息来定义规则,对报文进行过滤。 规则: ACL由一系列规则组成,每…...
Axios:现代JavaScript HTTP客户端
在当今的Web开发中,与后端服务进行数据交换是必不可少的。Axios是一个基于Promise的HTTP客户端,用于浏览器和node.js,它提供了一个简单的API来执行HTTP请求。本文将介绍Axios的基本概念、优势、安装方法、基本用法以及如何使用Axios下载文件。…...
Qml-TabBar类使用
Qml-TabBar类使用 TabBar的概述 TabBar继承于Container 由TabButton进行填充,可以与提供currentIndex属性的任何容器或布局控件一起使用,如StackLayout 或 SwipeView;contentHeight : real:TabBar的内容高度,用于计算标签栏的隐…...
qt QGraphicsEllipseItem详解
1、概述 QGraphicsEllipseItem是Qt框架中QGraphicsItem的一个子类,它提供了一个可以添加到QGraphicsScene中的椭圆项。QGraphicsEllipseItem表示一个带有填充和轮廓的椭圆,也可以用于表示椭圆段(通过startAngle()和spanAngle()方法ÿ…...