文件比较和文件流
文件比较和文件流
- 一、文本比较工具 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…...
【2024最新】基于Springboot+Vue的就业信息管理系统Lw+PPT
作者:计算机搬砖家 开发技术:SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:Java精选实战项…...
PySide6 QSS(Qt Style Sheets) Reference: PySide6 QSS参考指南
Qt官网参考资料: QSS介绍: Styling the Widgets Application - Qt for Pythonhttps://doc.qt.io/qtforpython-6/tutorials/basictutorial/widgetstyling.html#tutorial-widgetstyling QSS 参考手册: Qt Style Sheets Reference | Qt Widge…...
【笔记】成为雍正
观古代历史,不过帝王一家一姓之家史 时间 1662年,田文镜出生。1672年,张廷玉出生。1674年,胤礽出生。1678年,胤禛出生。1679年,年羹尧出生。1680年,鄂尔泰出生。1700年,索额图被赐死…...
Codeforces Round 913 (Div. 3)
题目链接 B. YetnotherrokenKeoard 题意 输入 输出 思路 用两个栈分别维护小写字母下标和大写字母下标,用一个vis数组标记字母是否删除 示例代码 void solve() {string s;cin >> s;int n s.size();vector<bool> vis(n, false);stack<int>sk…...
斐波那契数
C语言实现斐波那契数列的多种方法_斐波那契数列c语言-CSDN博客 题目描述 斐波那契数列为:1,1,2,3,5,8,13.....,常规递推公式f(n)f(n-1)f(n-2); 输入描述 输入一个整数n(0<n<50),为多组数据。 输出描述 输出第n个斐波那契数 样例输入 1 2 4样例输出…...
Redis高阶集群搭建+集群读写
问题 容量不够,redis 如何进行扩容?并发写操作, redis 如何分摊?另外,主从模式,薪火相传模式,主机宕机,导致 ip 地址发生变化,应用程序中配置需要修改对应的主机地址、端…...
Vision Transformer(vit)的主干
图解: 代码: class VisionTransformer(nn.Module):def __init__(self, img_size224, patch_size16, in_c3, num_classes1000,embed_dim768, depth12, num_heads12, mlp_ratio4.0, qkv_biasTrue,qk_scaleNone, representation_sizeNone, distilledFalse,…...
手撸了一个文件传输工具
在日常的开发与运维中,文件传输工具是不可或缺的利器。无论是跨服务器传递配置文件,还是快速从一台机器下载日志文件,一个高效、可靠且简单的文件传输工具能够显著提高工作效率。今天,我想分享我自己手撸一个文件传输工具的全过程…...
Java程序调kubernetes(k8s1.30.7)core API简单示例,并解决403权限验证问题,即何进行进行权限授权以及验证
简单记录问题 一、问题描述 希望通过Java程序使用Kubernetes提供的工具包实现对Kubernetes集群core API的调用,但是在高版本上遇见权限验证问题4xx。 <dependency><groupId>io.kubernetes</groupId><artifactId>client-java</artifact…...
java八股-Redis Stream和RocketMQ实现的解决方案
文章目录 Redis Stream方案:ShortLinkStatsSaveProducer.javaShortLinkStatsSaveConsumer.java RocketMQ方案ShortLinkStatsSaveProducer.javaShortLinkStatsSaveConsumer.java Redis Stream方案: ShortLinkStatsSaveProducer.java package com.nageoff…...
第29天 MCU入门
目录 MCU介绍 MCU的组成与作用 电子产品项目开发流程 硬件开发流程 常用元器件初步了解 硬件原理图与PCB板 常见电源符号和名称 电阻 电阻的分类 贴片电阻的封装说明: 色环电阻的计算 贴片电阻阻值计算 上拉电阻与下拉电阻 电容 电容的读数 二极管 LED 灯电路 钳位作…...
【Python网络爬虫笔记】6- 网络爬虫中的Requests库
一、概述 Requests 是一个用 Python 语言编写的、简洁且功能强大的 HTTP 库。它允许开发者方便地发送各种 HTTP 请求,如 GET、POST、PUT、DELETE 等,并且可以轻松地处理请求的响应。这个库在 Python 生态系统中被广泛使用,无论是简单的网页数…...
Linux网络_网络协议_网络传输_网络字节序
一.协议 1.概念 协议(Protocol) 是一组规则和约定,用于定义计算机网络中不同设备之间如何进行通信和数据交换。协议规定了数据的格式、传输方式、传输顺序等详细规则,确保不同设备和系统能够有效地互联互通。 在网络通信中&#…...
浅谈网络 | 应用层之流媒体与P2P协议
目录 流媒体名词系列视频的本质视频压缩编码过程如何在直播中看到帅哥美女?RTMP 协议 P2PP2P 文件下载种子文件 (.torrent)去中心化网络(DHT)哈希值与 DHT 网络DHT 网络是如何查找 流媒体 直播系统组成与协议 近几年直播比较火,…...
css vue vxe-text-ellipsis table 实现多行文本超出隐藏省略
分享 vxe-text-ellipsis table grid 多行文本溢出省略的用法 正常情况下如果需要使用文本超出隐藏,通过 css 就可以完成 overflow: hidden; text-overflow: ellipsis; white-space: nowrap;但是如果需要实现多行文本溢出,就很难实现里,谷歌…...
基于hexo框架的博客搭建流程
这篇博文讲一讲hexo博客的搭建及文章管理,也算是我对于暑假的一个交代 !!!注意:下面的操作是基于你已经安装了node.js和git的前提下进行的,并且拥有github账号 创建一个blog目录 在磁盘任意位置创建一个…...
数据结构-简单排序
一.前提 二.冒泡排序 三.插入排序 #include<iostream> using namespace std; typedef int ElemengType; void Bubble_Sort(ElemengType A[], int N) {for (int p N - 1; p > 0; p--) {int flag 0;for (int i 0; i < p; i) {if (A[i] > A[i 1]) {swap(A[i], …...
三十一:HTTP多种重定向跳转方式的差异
在现代网站开发中,HTTP 重定向是一种常见的技术,用于将用户的请求从一个 URL 跳转到另一个 URL。重定向机制广泛应用于网站迁移、SEO 优化、以及内容管理系统中。不同的 HTTP 状态码代表不同的重定向方式,每种方式的行为和适用场景各有不同。…...
利用Python爬虫精准获取淘宝商品详情的深度解析
在数字化时代,数据的价值日益凸显,尤其是在电子商务领域。淘宝作为中国最大的电商平台之一,拥有海量的商品数据,对于研究市场趋势、分析消费者行为等具有重要意义。本文将详细介绍如何使用Python编写爬虫程序,精准获取…...
架构师的英文:Architect
中文版 软件架构师 的英文是 “Software Architect”。 Software: 软件Architect: 架构师,通常指的是设计和规划某种系统或结构的人。 Software Architect 通常负责软件系统的整体设计、技术选型、架构规划,确保系统的可扩展性、可维护性和高效性等。…...
数据结构 ——— 计数排序算法的实现
目录 计数排序算法的思想 计数排序算法的实现 计数排序算法的思想 遍历数组,找出数组中的最大值 max 和 最小值 min 最大值 max 减去最小值 min 再加 1 得出数组元素的范围 range 利用 range 的大小 malloc 一个 count 数组用来计数 再对 count 数组进行初始化…...
k8s搭建Istio环境,案例pod一直处在Init:CrashLoopBackOff
1 部署calico网络环境,网上去找k8s版本对应的calico的配置文件,k8s2.8.0我用的3.28 2 安装istio环境 curl -L https://istio.io/downloadIstio | sh - # 省略istioctl生效的步骤 source <(istioctl completion zsh) istioctl install --set profile…...
Jenkins升级到最新版本后无法启动
1. 场景还原 最近在web界面将jenkins升级到最新版本后,后台无法启动jenkins服务,服务状态如下: 运行jenkins命令提示invalid Java version jenkins --version jenkins: invalid Java version: java version "1.8.0_202" Java(TM)…...
用户界面创建一个新的运动类型
● 现在我们需要根据我们之前规划的架构步骤来实现在用户界面创建一个运动类型 ● 首先我们在要获取用户在表单中输入的数据 //从表单中获取数据const type inputType.value;const distance inputDistance.value;const duration inputDuration.value;● 然后针对与不同的运动…...
ubuntu防火墙入门(一)——设置服务、关闭端口
本机想通过git clone gitgithub.com:skumra/robotic-grasping.git下载代码,firewall-config中需要为当前区域的防火墙开启SSH服务吗 是的,如果你想通过 git clone gitgithub.com:skumra/robotic-grasping.git 使用 SSH 协议从 GitHub 下载代码࿰…...
分治算法——二分查找(c++)(详解)
大家好,今天进入一个实用算法:分治算法。 1.分治算法介绍 分治算法,大概就是将一个大问题拆解成若干个小问题,将小问题一一解决,大问题也就迎刃而解。它包含了多种算法,比如递归、递推等。这里就讲解一下其…...
Binder架构
一、架构 如上图,binder 分为用户层和驱动层两部分,用户层有客户端(Client)、服务端(Server)、服务管理(ServiceManager)。 从用户空间的角度,使用步骤如下(…...
大数据治理:解锁数据价值,引领未来创新
目录 引言 一、大数据治理的定义 二、大数据治理的重要性 三、大数据治理的核心组件 四、大数据治理的实践案例 1. 数据标准化 2. 数据质量管理 案例一:医疗行业的大数据治理——智能医疗助手守护健康 引言 在数字化时代,数据已成为企业最宝贵的…...
解决windows下php8.x及以上版本,在Apache2.4中无法加载CURL扩展的问题
本文已首发于:秋码记录 若你也想搭建一个个人博客,可参考:国内 gitee.com Pages 下线了,致使众多站长纷纷改用 github、gitlab Pages 托管平台 在日新月异的信息化下,软件也在跟随着互联网的脚步,逐步推进…...
做网站用jsp还是j2ee/如何交换友情链接
2019独角兽企业重金招聘Python工程师标准>>> 转自BBS:http://www.52rd.com/bbs/Archive_Thread.asp?SID121010&TID3 1. 将matrix menu 背景图改成 PBM 1) 将 MAINLCD\MainMenu\MATRIX\MM_BG.GIF 改成 MM_BG.PBM 2) 修改 Them…...
做推广网站费用/百度电商推广
hive的存储格式 案例测试 案例一:textfile 案例二:sequencefile 案例三:parquet rcfile 和 orcfile跟上述一样 stored as rcfile stored as orcfile hive的索引 概要 索引的创建 2 )创建索引 create index index_rate2 on tabl…...
如何自己做网站/百度站长管理平台
现在大多办公室都会给玻璃门贴上防撞条,也会选择在上面镂空或者喷印上公司logo,那么办公室玻璃门防撞条有几种款式呢?下面双潇玻璃贴膜就来为大家解答一下。办公室玻璃门防撞条的这几种款式你都知道吗?玻璃门防撞条设计一股有单条…...
深圳有做网站的公司/嘉兴seo外包平台
这么可爱的姑娘你们舍得让我走吗?如果是这样我就真的走了哈!转载于:https://blog.51cto.com/13478717/1981776...
河南安阳紧急通知/百度seo报价
有用户在电脑系统中遇到了无法修改系统时间的问题,并提示Windows无法找到C盘中的rundll32.exe文件。rundll32.exe是重要的系统文件,会被一些病毒利用来入侵计算机,窃取个人数据。如果电脑提示无法找到rundll32.exe,可以通过以下…...
滨州住房和城乡建设部网站/电话销售怎么找客户渠道
作者:TwinsForChina链接:https://www.zhihu.com/question/25367290/answer/138972490来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。我们来做个测试 1. 用Windows记事本程序创建3个文件ÿ…...