当前位置: 首页 > article >正文

青少年编程与数学 02-020 C#程序设计基础 16课题、文件操作

青少年编程与数学 02-020 C#程序设计基础 16课题、文件操作

  • 一、文件操作
    • 1. 什么是文件操作?
    • 2. 文件操作在程序设计中的重要性
    • 小结
  • 二、C#文件操作
    • 1. 引入命名空间
    • 2. 常见文件操作
        • (1)创建文件
        • (2)写入文件
        • (3)读取文件
        • (4)追加内容到文件
        • (5)复制文件
        • (6)移动文件
        • (7)删除文件
        • (8)检查文件是否存在
    • 3. 使用`FileStream`处理大文件
        • (1)异步写入大文件
        • (2)异步读取大文件
    • 4. 异常处理
    • 5. 跨平台注意事项
  • 三、C#文件夹操作
    • 1. 创建文件夹
    • 2. 删除文件夹
    • 3. 检查文件夹是否存在
    • 4. 遍历文件夹内的文件
    • 5. 获取文件夹内的子文件夹
    • 6. 移动文件夹
    • 6. 复制文件夹
    • 7. 使用`DirectoryInfo`类
    • 8. 异常处理
  • 四、C#中的I/O数据流
    • 1. 数据流的分类
    • 2. 常见的数据流类
        • (1)`Stream`类
        • (2)`FileStream`
        • (3)`MemoryStream`
        • (4)`BufferedStream`
        • (5)`StreamReader`和`StreamWriter`
        • (6)`BinaryReader`和`BinaryWriter`
    • 3. 数据流的使用方法
        • (1)读取数据
        • (2)写入数据
        • (3)定位和移动
    • 4. 异步I/O操作
        • (1)异步读取数据
        • (2)异步写入数据
    • 5. 异常处理
    • 6. 资源管理
    • 小结
  • 五、文件操作和使用数据库
    • 1. 数据存储
    • 2. 数据访问
    • 3. 数据管理
    • 4. 性能和扩展性
    • 5. 实际应用中的结合
    • 小结
  • 总结

摘要:本文介绍了C#程序设计中的文件操作和数据库使用。文件操作包括文件和文件夹的创建、读写、复制、移动、删除等,通过.NET 8的System.IO命名空间实现。强调了异步I/O操作和异常处理的重要性。深入探讨了C#中的I/O数据流,包括FileStreamMemoryStream等常见类的使用。分析了文件操作与数据库在数据存储、访问、管理和性能方面的差异,并提出了结合使用的方法。合理选择和结合二者可提升程序的灵活性和健壮性。

关键词:C#;文件操作;数据库;.NET 8;I/O数据流;异步操作;异常处理

AI助手:Kimi


一、文件操作

1. 什么是文件操作?

文件操作是指在程序设计中对文件进行的一系列操作,包括文件的创建、读取、写入、更新、删除等。这些操作允许程序与外部存储设备(如硬盘、固态硬盘等)进行交互,从而实现数据的持久化存储和访问。常见的文件操作包括:

  • 文件创建:创建一个新的文件。
  • 文件读取:从文件中读取数据到程序中。
  • 文件写入:将数据写入到文件中。
  • 文件更新:修改文件中的部分内容。
  • 文件删除:删除一个已存在的文件。
  • 文件复制:复制一个文件的内容到另一个文件。
  • 文件移动:将文件从一个位置移动到另一个位置。

2. 文件操作在程序设计中的重要性

数据持久化:

文件操作允许程序将数据保存到外部存储设备中,使得数据在程序关闭后仍然可以被访问。这对于需要长期存储数据的应用程序(如数据库、日志系统等)至关重要。

数据共享:

文件可以被多个程序共享和访问,使得不同程序之间能够方便地交换数据。例如,一个程序可以将数据写入到一个文件中,另一个程序可以读取该文件中的数据。

配置管理:

文件常用于存储程序的配置信息,如配置文件(.ini.json.xml等)。通过文件操作,程序可以在启动时读取配置文件,并根据配置信息调整运行行为。

日志记录:

文件操作用于记录程序运行时的日志信息,帮助开发者进行调试和问题排查。日志文件可以记录程序的运行状态、错误信息等,便于后续分析。

资源管理:

文件操作可以帮助程序管理外部资源,如文件流、数据库连接等。通过文件操作,程序可以确保资源在使用后被正确释放,避免资源泄漏。

用户交互:

文件操作可以用于实现用户与程序之间的交互。例如,用户可以通过文件上传功能将文件上传到服务器,程序可以通过文件下载功能将文件提供给用户。

提高程序的灵活性和可扩展性:
通过文件操作,程序可以动态地读取和写入数据,而不需要在程序代码中硬编码数据。这使得程序更加灵活,便于扩展和维护。

小结

文件操作是程序设计中的一个基本且重要的功能,它允许程序与外部存储设备进行交互,实现数据的持久化存储和访问。文件操作不仅支持数据的长期存储和共享,还用于配置管理、日志记录、资源管理和用户交互等。通过合理使用文件操作,可以显著提高程序的灵活性、可扩展性和健壮性。

二、C#文件操作

在C#程序设计中,使用.NET 8进行文件操作时,可以利用System.IO命名空间提供的类和方法。这些工具不仅支持传统的同步操作,还支持异步操作,有助于提高程序的响应性和性能。以下是基于.NET 8的文件操作示例:

1. 引入命名空间

using System;
using System.IO;
using System.Threading.Tasks;

2. 常见文件操作

(1)创建文件
string filePath = @"C:\example\file.txt";
File.Create(filePath).Dispose(); // 创建文件并立即释放
(2)写入文件
await File.WriteAllTextAsync(filePath, "Hello, World!"); // 异步写入文本
(3)读取文件
string content = await File.ReadAllTextAsync(filePath); // 异步读取文本
Console.WriteLine(content);
(4)追加内容到文件
await File.AppendAllTextAsync(filePath, " Additional text."); // 异步追加文本
(5)复制文件
string sourceFilePath = @"C:\example\file.txt";
string destinationFilePath = @"C:\example\file_copy.txt";
File.Copy(sourceFilePath, destinationFilePath, true); // true表示覆盖目标文件
(6)移动文件
string sourceFilePath = @"C:\example\file.txt";
string destinationFilePath = @"C:\example\file_moved.txt";
File.Move(sourceFilePath, destinationFilePath);
(7)删除文件
File.Delete(destinationFilePath);
(8)检查文件是否存在
if (File.Exists(filePath))
{Console.WriteLine("File exists.");
}

3. 使用FileStream处理大文件

对于大文件,FileStream提供了更灵活的控制,允许逐步读取或写入文件。

(1)异步写入大文件
using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None, 4096, true))
{byte[] data = System.Text.Encoding.UTF8.GetBytes("Streamed content.");await fs.WriteAsync(data, 0, data.Length);
}
(2)异步读取大文件
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, true))
{byte[] buffer = new byte[4096];int bytesRead;while ((bytesRead = await fs.ReadAsync(buffer, 0, buffer.Length)) > 0){// 处理缓冲区数据Console.WriteLine($"Bytes read: {bytesRead}");}
}

4. 异常处理

在文件操作中,应妥善处理可能发生的异常,如权限不足或文件锁定。

try
{using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)){// 文件操作}
}
catch (UnauthorizedAccessException ex)
{Console.WriteLine("Access denied: " + ex.Message);
}
catch (IOException ex)
{Console.WriteLine("File is locked or in use: " + ex.Message);
}

5. 跨平台注意事项

在跨平台环境中,文件路径的处理尤为重要。Path.CombinePath.DirectorySeparatorChar可以帮助标准化路径构造。

string path = Path.Combine(Environment.CurrentDirectory, "data", "file.txt");

通过这些方法,你可以高效地完成文件操作,同时利用.NET 8的异步特性提高程序的性能和响应能力。

三、C#文件夹操作

在C#程序设计中,使用.NET 8对文件夹进行操作主要依赖于System.IO命名空间中的DirectoryDirectoryInfo类。以下是基于.NET 8的文件夹操作示例:

1. 创建文件夹

string folderPath = @"C:\ExampleFolder";
Directory.CreateDirectory(folderPath); // 创建文件夹

2. 删除文件夹

Directory.Delete(folderPath, true); // true表示递归删除文件夹内的所有内容

3. 检查文件夹是否存在

if (Directory.Exists(folderPath))
{Console.WriteLine("Folder exists.");
}

4. 遍历文件夹内的文件

string[] files = Directory.GetFiles(folderPath); // 获取文件夹内的所有文件
foreach (string file in files)
{Console.WriteLine(file);
}

5. 获取文件夹内的子文件夹

string[] subFolders = Directory.GetDirectories(folderPath); // 获取文件夹内的所有子文件夹
foreach (string subFolder in subFolders)
{Console.WriteLine(subFolder);
}

6. 移动文件夹

string sourceFolderPath = @"C:\ExampleFolder";
string destinationFolderPath = @"C:\NewFolder";
Directory.Move(sourceFolderPath, destinationFolderPath); // 移动文件夹

6. 复制文件夹

.NET 8没有直接提供复制文件夹的方法,但可以通过递归实现:

public static void CopyFolder(string sourceDir, string destinationDir)
{Directory.CreateDirectory(destinationDir); // 创建目标文件夹foreach (string file in Directory.GetFiles(sourceDir, "*.*", SearchOption.AllDirectories)){string destFile = file.Replace(sourceDir, destinationDir);Directory.CreateDirectory(Path.GetDirectoryName(destFile)); // 创建目标文件夹File.Copy(file, destFile); // 复制文件}
}

7. 使用DirectoryInfo

DirectoryInfo类提供了更丰富的文件夹操作功能:

DirectoryInfo dir = new DirectoryInfo(folderPath);
if (!dir.Exists)
{dir.Create(); // 创建文件夹
}
else
{Console.WriteLine("The directory already exists.");
}

8. 异常处理

在进行文件夹操作时,应妥善处理可能发生的异常,如权限不足或文件夹不存在:

try
{Directory.CreateDirectory(folderPath);
}
catch (UnauthorizedAccessException ex)
{Console.WriteLine("Access denied: " + ex.Message);
}
catch (IOException ex)
{Console.WriteLine("An I/O error occurred: " + ex.Message);
}

通过这些方法,你可以高效地完成文件夹操作,同时利用.NET 8的特性提高程序的性能和响应能力。

四、C#中的I/O数据流

在C#中,I/O(输入/输出)数据流是处理数据读写操作的核心机制。数据流(Stream)是表示字节序列的抽象基类,提供了对数据进行顺序读写的基本方法。C#中的I/O数据流主要通过System.IO命名空间中的类来实现,这些类提供了丰富的功能,用于处理各种类型的I/O操作。

1. 数据流的分类

数据流主要分为两大类:输入流(InputStream)和输出流(OutputStream)。输入流用于从数据源读取数据,输出流用于向数据目标写入数据。

2. 常见的数据流类

(1)Stream

Stream是所有数据流的基类,提供了基本的读写方法。它是一个抽象类,不能直接实例化,但可以通过派生类来实现具体的功能。

(2)FileStream

FileStream用于处理文件的读写操作。它可以直接操作文件系统中的文件。

using (FileStream fs = new FileStream("example.txt", FileMode.Create, FileAccess.Write))
{byte[] data = System.Text.Encoding.UTF8.GetBytes("Hello, World!");fs.Write(data, 0, data.Length);
}
(3)MemoryStream

MemoryStream用于在内存中读写数据。它通常用于临时存储数据,或者在内存中进行数据处理。

using (MemoryStream ms = new MemoryStream())
{byte[] data = System.Text.Encoding.UTF8.GetBytes("Hello, World!");ms.Write(data, 0, data.Length);ms.Seek(0, SeekOrigin.Begin); // 将流的位置移动到开始处byte[] readData = ms.ToArray();Console.WriteLine(System.Text.Encoding.UTF8.GetString(readData));
}
(4)BufferedStream

BufferedStream用于对其他流进行缓冲处理,提高读写效率。它通常用于包装其他流,以减少对底层数据源的访问次数。

using (FileStream fs = new FileStream("example.txt", FileMode.Create, FileAccess.Write))
using (BufferedStream bs = new BufferedStream(fs))
{byte[] data = System.Text.Encoding.UTF8.GetBytes("Hello, World!");bs.Write(data, 0, data.Length);
}
(5)StreamReaderStreamWriter

StreamReaderStreamWriter是基于Stream的高级类,用于读写文本数据。它们提供了更方便的方法来处理文本文件。

using (StreamWriter sw = new StreamWriter("example.txt"))
{sw.WriteLine("Hello, World!");
}using (StreamReader sr = new StreamReader("example.txt"))
{string line = sr.ReadLine();Console.WriteLine(line);
}
(6)BinaryReaderBinaryWriter

BinaryReaderBinaryWriter用于读写二进制数据。它们提供了更方便的方法来处理二进制文件。

using (FileStream fs = new FileStream("example.bin", FileMode.Create, FileAccess.Write))
using (BinaryWriter bw = new BinaryWriter(fs))
{bw.Write(123);bw.Write("Hello, World!");
}using (FileStream fs = new FileStream("example.bin", FileMode.Open, FileAccess.Read))
using (BinaryReader br = new BinaryReader(fs))
{int number = br.ReadInt32();string text = br.ReadString();Console.WriteLine(number);Console.WriteLine(text);
}

3. 数据流的使用方法

(1)读取数据

使用Read方法从流中读取数据。Read方法返回读取的字节数。

using (FileStream fs = new FileStream("example.txt", FileMode.Open, FileAccess.Read))
{byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0){string content = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead);Console.WriteLine(content);}
}
(2)写入数据

使用Write方法向流中写入数据。

using (FileStream fs = new FileStream("example.txt", FileMode.Create, FileAccess.Write))
{byte[] data = System.Text.Encoding.UTF8.GetBytes("Hello, World!");fs.Write(data, 0, data.Length);
}
(3)定位和移动

使用Seek方法在流中移动位置。

using (FileStream fs = new FileStream("example.txt", FileMode.Open, FileAccess.Read))
{fs.Seek(5, SeekOrigin.Begin); // 将位置移动到第5个字节byte[] buffer = new byte[1024];int bytesRead = fs.Read(buffer, 0, buffer.Length);string content = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead);Console.WriteLine(content);
}

4. 异步I/O操作

.NET 8支持异步I/O操作,可以提高程序的响应性和性能。

(1)异步读取数据

使用ReadAsync方法异步读取数据。

using (FileStream fs = new FileStream("example.txt", FileMode.Open, FileAccess.Read))
{byte[] buffer = new byte[1024];int bytesRead = await fs.ReadAsync(buffer, 0, buffer.Length);string content = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead);Console.WriteLine(content);
}
(2)异步写入数据

使用WriteAsync方法异步写入数据。

using (FileStream fs = new FileStream("example.txt", FileMode.Create, FileAccess.Write))
{byte[] data = System.Text.Encoding.UTF8.GetBytes("Hello, World!");await fs.WriteAsync(data, 0, data.Length);
}

5. 异常处理

在进行I/O操作时,应妥善处理可能发生的异常,如文件不存在、权限不足等。

try
{using (FileStream fs = new FileStream("example.txt", FileMode.Open, FileAccess.Read)){byte[] buffer = new byte[1024];int bytesRead = fs.Read(buffer, 0, buffer.Length);string content = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead);Console.WriteLine(content);}
}
catch (FileNotFoundException ex)
{Console.WriteLine("File not found: " + ex.Message);
}
catch (UnauthorizedAccessException ex)
{Console.WriteLine("Access denied: " + ex.Message);
}
catch (IOException ex)
{Console.WriteLine("An I/O error occurred: " + ex.Message);
}

6. 资源管理

使用using语句确保资源在使用后被正确释放。

using (FileStream fs = new FileStream("example.txt", FileMode.Create, FileAccess.Write))
{byte[] data = System.Text.Encoding.UTF8.GetBytes("Hello, World!");fs.Write(data, 0, data.Length);
}

小结

在C#中,I/O数据流是处理数据读写操作的核心机制。通过System.IO命名空间中的类,可以实现文件和内存的读写操作。常见的数据流类包括FileStreamMemoryStreamBufferedStreamStreamReaderStreamWriterBinaryReaderBinaryWriter。这些类提供了丰富的功能,用于处理各种类型的I/O操作。通过合理使用这些类,可以提高程序的性能和响应能力。同时,应妥善处理可能发生的异常,并使用using语句确保资源的正确释放。

五、文件操作和使用数据库

文件操作和使用数据库是软件开发中两种常见的数据存储和管理方式。它们在功能和用途上有一定的重叠,但在实际应用中各有优势和适用场景。以下是文件操作与使用数据库的关系和区别:

1. 数据存储

文件操作:

  • 存储方式:将数据以文件的形式存储在文件系统中,可以是文本文件、二进制文件、XML文件等。
  • 适用场景:适用于存储简单的数据结构,如日志文件、配置文件、小型文本数据等。
  • 优点:简单易用,不需要额外的数据库管理系统(DBMS),适合轻量级应用。
  • 缺点:数据管理和查询功能有限,扩展性差,不适合处理大量复杂的数据。

数据库:

  • 存储方式:将数据存储在数据库管理系统中,如MySQL、PostgreSQL、SQL Server、MongoDB等。
  • 适用场景:适用于存储复杂的数据结构,支持关系型(SQL)和非关系型(NoSQL)数据库。
  • 优点:强大的数据管理和查询功能,支持事务处理、数据完整性约束、并发控制等,适合处理大量复杂的数据。
  • 缺点:需要安装和配置数据库管理系统,学习和使用成本较高。

2. 数据访问

文件操作:

  • 访问方式:通过文件路径直接访问文件,使用System.IO命名空间中的类(如FileStreamStreamReaderStreamWriter等)进行读写操作。
  • 适用场景:适用于简单的数据读写操作,如读取配置文件、写入日志文件等。
  • 优点:直接操作文件系统,无需额外的中间层,适合轻量级应用。
  • 缺点:数据访问效率低,不适合高并发场景,数据一致性难以保证。

数据库:

  • 访问方式:通过SQL语句或数据库API进行数据访问,支持复杂的查询和事务处理。
  • 适用场景:适用于复杂的数据查询和事务处理,如企业级应用、Web应用等。
  • 优点:支持高效的查询和索引,事务处理保证数据一致性,支持并发访问。
  • 缺点:需要编写SQL语句或使用ORM框架,学习和使用成本较高。

3. 数据管理

文件操作:

  • 管理方式:通过文件系统进行管理,支持文件的创建、删除、移动、复制等操作。
  • 适用场景:适用于简单的文件管理,如日志文件的滚动、备份等。
  • 优点:简单易用,直接操作文件系统。
  • 缺点:缺乏数据完整性约束和事务处理,数据一致性难以保证。

数据库:

  • 管理方式:通过数据库管理系统进行管理,支持数据的增删改查、事务处理、数据完整性约束、备份和恢复等。
  • 适用场景:适用于复杂的数据管理,如企业级应用、Web应用等。
  • 优点:强大的数据管理功能,支持事务处理和数据完整性约束,适合处理大量复杂的数据。
  • 缺点:需要安装和配置数据库管理系统,学习和使用成本较高。

4. 性能和扩展性

文件操作:

  • 性能:对于小文件和简单操作,文件操作的性能通常较好。
  • 扩展性:扩展性较差,不适合处理大量复杂的数据,不适合高并发场景。

数据库:

  • 性能:对于复杂的数据操作和高并发场景,数据库的性能通常较好,支持索引、缓存等优化技术。
  • 扩展性:扩展性较好,支持分布式数据库、分片、复制等技术,适合处理大量复杂的数据。

5. 实际应用中的结合

在实际应用中,文件操作和数据库常常结合使用,以发挥各自的优势:

  • 日志文件:使用文件操作记录日志信息,同时将关键日志信息存储到数据库中,便于后续查询和分析。
  • 文件存储:将文件存储在文件系统中,同时将文件的元数据(如文件名、路径、大小、创建时间等)存储到数据库中,便于管理和查询。
  • 配置文件:使用文件操作读取配置文件,同时将配置信息存储到数据库中,便于动态更新和管理。

小结

文件操作和数据库在数据存储、访问、管理和性能方面各有优势和适用场景。文件操作适用于简单的数据存储和管理,而数据库适用于复杂的数据管理和高并发场景。在实际应用中,可以根据具体需求选择合适的存储方式,或者将文件操作和数据库结合使用,以发挥各自的优势。

总结

本文全面介绍了C#程序设计中的文件操作与数据库使用。首先,阐述了文件操作的基本概念及其在程序设计中的重要性,包括数据持久化、共享、配置管理等。接着,详细展示了基于.NET 8的C#文件操作方法,涵盖文件和文件夹的创建、读写、复制、移动、删除等操作,并强调了异步I/O操作和异常处理的重要性。此外,深入探讨了C#中的I/O数据流,包括常见数据流类的使用和异步操作的优势。最后,分析了文件操作与数据库的关系,指出二者在数据存储、访问、管理和性能方面的差异,并提出了在实际应用中结合使用的方法。通过合理选择和结合文件操作与数据库,可以有效提升程序的灵活性、可扩展性和健壮性。

相关文章:

青少年编程与数学 02-020 C#程序设计基础 16课题、文件操作

青少年编程与数学 02-020 C#程序设计基础 16课题、文件操作 一、文件操作1. 什么是文件操作?2. 文件操作在程序设计中的重要性小结 二、C#文件操作1. 引入命名空间2. 常见文件操作(1)创建文件(2)写入文件(3…...

怎么让大语言模型(LLMs)自动生成和优化提示词:APE

怎么让大语言模型(LLMs)自动生成和优化提示词:APE https://arxiv.org/pdf/2211.01910 1. 研究目标:让机器自己学会设计提示词 问题:大语言模型(如GPT-3)很强大,但需要精心设计的“提示词”才能发挥最佳效果。过去靠人工设计提示词,费时费力,还可能因表述差异导致模…...

网关路由配置(Gateway Filters)

- id: system-admin-api # 路由的编号uri: grayLb://system-serverpredicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组- Path/admin-api/system/**filters:- RewritePath/admin-api/system/v3/api-docs, /v3/api-docs # 配置,…...

实现单例模式的常见方式

前言 java有多种设计模式,如下图所示: 单例模式它确保一个类只有一个实例,并提供一个全局访问点。 1、单例模式介绍 1.1、使用原因 为什么要使用单例模式? 1. 控制资源访问 核心价值:确保对共享资源(如…...

Go 为何天生适合云原生?

当前我们正处在 AI 时代,但是在基础架构领域,仍然处在云原生时代。云原生仍然是当前时代的风口之一。作为一个 Go 开发者,职业进阶的下一站就是学习云原生技术。作为 Go 开发者学习云原生技术有得天独厚的优势,这是因为 Go 天生适…...

数仓面试提问:在资源(计算、存储、人力)受限的情况下,如何优先处理需求并保证核心交付?

在资源受限的情况下高效处理需求并保证核心交付,是每个团队管理者都会面临的挑战。这种既要“少花钱多办事”又要确保关键任务不延误的压力,面对这种情况,我们需要一套系统化的方法来实现需求评估、优先级排序和有效沟通。以下是经过实践验证的策略和方法: 🛠️ 一、 保证…...

第七十四篇 高并发场景下的Java并发容器:用生活案例讲透技术原理

避开快递/电路/医疗案例,聚焦餐厅、超市、影院等生活场景,轻松掌握高并发设计精髓 引言:为什么需要并发容器? 想象一个繁忙的火锅店:30个服务员同时用平板电脑下单。若用普通HashMap记录订单,当两人同时操…...

day20 leetcode-hot100-38(二叉树3)

226. 翻转二叉树 - 力扣(LeetCode) 1.广度遍历 思路 这题目很简单,就是交换每个节点的左右子树,也就是相当于遍历到某个节点,然后交换子节点即可。 具体步骤 (1)创建队列,使用广…...

Python打卡训练营学习记录Day46

作业: 今日代码较多,理解逻辑即可对比不同卷积层特征图可视化的结果(可选) 一、CNN特征图可视化实现 import torch import matplotlib.pyplot as pltdef visualize_feature_maps(model, input_tensor):# 注册钩子获取中间层输出…...

使用 C/C++ 和 OpenCV 实现滑动条控制图像旋转

使用 C 和 OpenCV 实现滑动条控制图像旋转 本文将介绍如何使用 C 和 OpenCV 库创建一个简单的应用程序,该程序可以显示一张图片,并允许用户通过一个滑动条(Trackbar)来实时控制图片的旋转角度。这是一个非常实用的交互式功能&…...

【 java 集合知识 第一篇 】

目录 1.概念 1.1.集合与数组的区别 1.2.集合分类 1.3.Collection和Collections的区别 1.4.集合遍历的方法 2.List 2.1.List的实现 2.2.可以一边遍历一边修改List的方法 2.3.List快速删除元素的原理 2.4.ArrayList与LinkedList的区别 2.5.线程安全 2.6.ArrayList的扩…...

护网行动面试试题(2)

文章目录 51、常见的安全工具有哪些?52、说说Nmap工具的使用?53、近几年HW常见漏洞有哪些?54、HW 三(四)大洞56、获得文件读取漏洞,通常会读哪些文件57、了解过反序列化漏洞吗?58、常见的框架漏…...

使用WebSocket实时获取印度股票数据源(无调用次数限制)实战

使用WebSocket实时获取印度股票数据源(无调用次数限制)实战 一、前置准备 1. 获取API密钥 登录 StockTV开发者平台 → 联系客服获取测试Key(格式MY4b781f618e3f43c4b055f25fa61941ad),该密钥无调用次数限制且支持实时…...

阿里140 补环境日志

所有属性值是 __cheng________ 都是我做的防止套代理 非140环境检测代码 这个日志绝大多数 是做和浏览器tostring结果 处理一致 方法: toString 函数: ...... 结果: ..... 当前代码补了事件和dom 实际手补 比这少些 下方为环境日志: VM526 vm.js:…...

uniapp map组件的基础与实践

UniApp 中的 map 组件用于在应用中展示地图,并且支持在地图上添加标记、绘制线条和多边形等功能。以下是一些基本用法: 1. 基本结构 首先,确保你在页面的 .vue 文件中引入了 map 组件。以下是创建一个简单地图的基本代码结构: <template><view class="con…...

在 Kali 上打造渗透测试专用的 VSCode 环境

Kali Linux 是渗透测试领域的首选操作系统&#xff0c;搭配一款高效的代码编辑器可以显著提升工作效率。Visual Studio Code&#xff08;VSCode&#xff09;以其轻量、强大的扩展性和跨平台支持&#xff0c;成为许多安全研究者的选择。本文将详细介绍如何在 Kali Linux 上安装 …...

《前端面试题:CSS3新特性》

CSS3新特性指南&#xff1a;从基础到实战详解 CSS3作为现代Web开发的核心样式标准&#xff0c;彻底改变了前端开发者的工作方式。它不仅解决了传统CSS的诸多痛点&#xff0c;还引入了强大的布局模型、动画系统和响应式设计能力。本文将全面解析CSS3的十大核心新特性&#xff0…...

极速互联·智控未来——SG-Can(FD)Hub-600 六通道CANFD集线器

工业通信的全维进化&#xff0c;CANFD高速网络的终极枢纽&#xff01; 核心革新 CANFD协议深度支持&#xff1a;名义波特率5K-1Mbps&#xff0c;数据域速率飙升至5Mbps&#xff08;较传统CAN提升5倍&#xff09;&#xff0c;开启位速率转换最低100Kbps&#xff0c;完美兼容新旧…...

OpenVINO环境配置--OpenVINO安装

TOC环境配置–OpenVINO安装 本节内容 OpenVINO 支持的安装方式有很多种&#xff0c;每一种操作系统以及语言都有对应的安装方法&#xff0c;在官网上有很详细的教程&#xff1a;   我们可以根据自己的需要&#xff0c;来点选环境配置和安装方法&#xff0c;然后网页会给出正…...

Linux top 命令 的使用总结

以下是 Linux top 命令 的使用总结,按功能分类整理,方便快速查询: 一、命令行参数 参数描述示例-d <秒数>设置刷新间隔时间top -d 2(每2秒刷新)-p <PID>监控指定进程IDtop -p 1234(仅显示PID为1234的进程)-u <用户名>显示指定用户的进程top -u root(…...

ajax学习手册

Ajax 通俗易懂学习手册 目录 Ajax 基础概念XMLHttpRequest 详解Fetch API (现代方式)处理不同数据格式错误处理和状态码Ajax 高级技巧实战项目案例最佳实践 Ajax 基础概念 什么是 Ajax&#xff1f; Ajax Asynchronous JavaScript And XML 通俗解释&#xff1a; Ajax 就像…...

Python爬虫实战:研究urlunparse函数相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上的数据量呈现出指数级增长。如何从海量的网页数据中高效地获取有价值的信息,成为了学术界和工业界共同关注的问题。网络爬虫作为一种自动获取网页内容的技术,能够按照预定的规则遍历互联网上的网页,并提取出所需…...

[蓝桥杯]采油

采油 题目描述 LQ 公司是世界著名的石油公司&#xff0c;为世界供应优质石油。 最近&#xff0c;LQ 公司又在森林里发现了一大片区域的油田&#xff0c;可以在这个油田中开采 nn 个油井。 LQ 公司在这 nn 个油井之间修建了 n−1n−1 条道路&#xff0c;每条道路连接两个油井…...

OpenLayers 地图定位

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图定位功能很常见&#xff0c;在移动端和PC端都需要经常用到&#xff0c;像百度、高德、谷歌都提供了方便快捷的定位功能。OpenLayers中也提供了定位的…...

黑龙江云前沿服务器租用:便捷高效的灵活之选​

服务器租用&#xff0c;即企业直接从互联网数据中心&#xff08;IDC&#xff09;提供商处租赁服务器。企业只需按照所选的服务器配置和租赁期限&#xff0c;定期支付租金&#xff0c;即可使用服务器开展业务。​ 便捷快速部署&#xff1a;租用服务器能极大地缩短服务器搭建周期…...

PyTorch中matmul函数使用详解和示例代码

torch.matmul 是 PyTorch 中用于执行矩阵乘法的函数&#xff0c;它根据输入张量的维度自动选择适当的矩阵乘法方式&#xff0c;包括&#xff1a; 向量内积&#xff08;1D 1D&#xff09;矩阵乘向量&#xff08;2D 1D&#xff09;向量乘矩阵&#xff08;1D 2D&#xff09;矩…...

论文解读:Locating and Editing Factual Associations in GPT(ROME)

论文发表于人工智能顶会NeurIPS(原文链接)&#xff0c;研究了GPT(Generative Pre-trained Transformer)中事实关联的存储和回忆&#xff0c;发现这些关联与局部化、可直接编辑的计算相对应。因此&#xff1a; 1、开发了一种因果干预方法&#xff0c;用于识别对模型的事实预测起…...

NoSQl之Redis部署

一、Redis 核心概念与技术定位 1. 数据库分类与 Redis 的诞生背景 关系型数据库的局限性 数据模型&#xff1a;基于二维表结构&#xff0c;通过 SQL 操作&#xff0c;强一致性&#xff08;ACID 特性&#xff09;&#xff0c;适合结构化事务场景&#xff08;如银行转账、订单管…...

学习设计模式《十二》——命令模式

一、基础概念 命令模式的本质是【封装请求】命令模式的关键是把请求封装成为命令对象&#xff0c;然后就可以对这个命令对象进行一系列的处理&#xff08;如&#xff1a;参数化配置、可撤销操作、宏命令、队列请求、日志请求等&#xff09;。 命令模式的定义&#xff1a;将一个…...

十三、【核心功能篇】测试计划管理:组织和编排测试用例

【核心功能篇】测试计划管理&#xff1a;组织和编排测试用例 前言准备工作第一部分&#xff1a;后端实现 (Django)1. 定义 TestPlan 模型2. 生成并应用数据库迁移3. 创建 TestPlanSerializer4. 创建 TestPlanViewSet5. 注册路由6. 注册到 Django Admin 第二部分&#xff1a;前端…...