C#实现遍历本地名为Config文件夹,并获取所有子文件夹的名字以及所有文件名为AutoBuildConfig.yaml文件中对应的releaseID和buildSystem的value值,讲这些数据保存到数据库
时间: 2024-09-22 11:06:08 浏览: 39
在C#中,你可以通过`DirectoryInfo`, `FileInfo`, 和 `FileSystemWatcher` 类来遍历文件夹并获取所需信息。以下是实现这个功能的一般步骤:
1. **添加必要的命名空间**:
```csharp
using System;
using System.IO;
using System.Data.SqlClient; // 如果你使用的是SQL Server作为数据库
using System.Data.OleDb; // 或者如果你使用的是OleDb连接其他类型的数据库
```
2. **创建数据库连接**:
根据你的数据库类型选择合适的连接字符串。
3. **遍历目录结构**:
```csharp
string folderPath = @"C:\Config"; // 替换为你实际的路径
DirectoryInfo directory = new DirectoryInfo(folderPath);
foreach (DirectoryInfo subdir in directory.GetDirectories())
{
// 对每个子目录操作
ProcessSubDirectory(subdir);
}
```
4. **处理子目录下的 AutoBuildConfig.yaml 文件**:
```csharp
private void ProcessSubDirectory(DirectoryInfo subdir)
{
string yamlFilePath = Path.Combine(subdir.FullName, "AutoBuildConfig.yaml");
if (File.Exists(yamlFilePath))
{
try
{
var configContent = File.ReadAllText(yamlFilePath);
// 使用YAML解析库解析配置内容,获取 releaseID 和 buildSystem 的 value
dynamic config = ... // 解析YAML内容
SaveToDatabase(config.releaseID, config.buildSystem); // 调用存储函数
}
catch (Exception ex)
{
Console.WriteLine($"Error reading file: {ex.Message}");
}
}
}
private void SaveToDatabase(string releaseId, string buildSystem)
{
string connectionString = ... // 获取数据库连接字符串
string query = "INSERT INTO YourTable (ReleaseID, BuildSystem) VALUES (@releaseId, @buildSystem)";
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@releaseId", releaseId);
command.Parameters.AddWithValue("@buildSystem", buildSystem);
connection.Open();
command.ExecuteNonQuery();
}
}
```
5. **异常处理**:
确保在读取文件、解析YAML和存入数据库过程中捕获可能出现的错误。
6. **监视文件变化**:
如果你想实时监控文件变动,可以使用 `FileSystemWatcher`。例如:
```csharp
FileSystemWatcher watcher = new FileSystemWatcher(yamlFilePath);
watcher.Changed += (_, e) => ProcessSubDirectory(subdir);
watcher.EnableRaisingEvents = true;
```
请注意,这只是一个基本示例,实际代码可能需要根据你的数据库连接方式、YAML文件的实际格式以及具体的错误处理策略进行调整。同时,为了安全起见,你应该避免直接将用户输入或敏感信息用于SQL查询。
阅读全文