Untitled
unknown
plain_text
a year ago
4.5 kB
9
Indexable
using System;
using System.IO;
using System.Linq;
using System.Windows.Forms;
namespace MapParser
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnSelectFolder_Click(object sender, EventArgs e)
{
using (FolderBrowserDialog folderDialog = new FolderBrowserDialog())
{
if (folderDialog.ShowDialog() == DialogResult.OK)
{
lblSelectedFolder.Text = folderDialog.SelectedPath;
txtStatus.AppendText($"Selected Folder: {folderDialog.SelectedPath}\n");
}
}
}
private void btnGenerateDatFile_Click(object sender, EventArgs e)
{
string folderPath = lblSelectedFolder.Text;
if (string.IsNullOrEmpty(folderPath) || !Directory.Exists(folderPath))
{
MessageBox.Show("Please select a valid folder containing .amf files.");
return;
}
try
{
txtStatus.Clear(); // Clear previous messages
string datFilePath = Path.Combine(folderPath, "node_data.dat");
txtStatus.AppendText("Dat file generation started...\n");
GenerateDatFile(folderPath, datFilePath);
MessageBox.Show("Dat file generated successfully!");
txtStatus.AppendText("Dat file generation completed successfully.\n");
}
catch (Exception ex)
{
txtStatus.AppendText($"Error: {ex.Message}\n");
}
}
private void GenerateDatFile(string folderPath, string outputFilePath)
{
// Gather all .amf files in the folder
var amfFiles = Directory.GetFiles(folderPath, "C*.amf", SearchOption.AllDirectories);
using (FileStream fs = new FileStream(outputFilePath, FileMode.Create))
using (BinaryWriter writer = new BinaryWriter(fs))
{
foreach (var amfFile in amfFiles)
{
try
{
// Extract coordinates from the .amf file name (assume format "C<col>,<row>.amf")
string fileName = Path.GetFileNameWithoutExtension(amfFile);
string[] parts = fileName.Substring(1).Split(',');
if (parts.Length != 2 || !int.TryParse(parts[0], out int columnId) || !int.TryParse(parts[1], out int rowId))
{
txtStatus.AppendText($"Warning: Invalid sector ID in file name: {fileName}. Skipping...\n");
continue; // Skip files with invalid sector IDs
}
// Combine columnId and rowId into a single integer sector ID
int sectorId = (columnId << 16) | rowId;
// Write the sector ID (4 bytes)
writer.Write(sectorId);
// Read the .amf file and parse node data (1024 bytes expected)
byte[] nodeData = new byte[1024];
using (FileStream amfStream = new FileStream(amfFile, FileMode.Open, FileAccess.Read))
{
// Ensure the file has at least 1024 bytes
if (amfStream.Length < 1024)
{
txtStatus.AppendText($"Warning: File {fileName} is too small to contain node data (less than 1024 bytes). Skipping...\n");
continue;
}
// Read exactly 1024 bytes of node data
amfStream.Read(nodeData, 0, 1024);
}
// Write the node data (1024 bytes) to the .dat file
writer.Write(nodeData);
}
catch (Exception ex)
{
txtStatus.AppendText($"Error processing {amfFile}: {ex.Message}\n");
}
}
}
txtStatus.AppendText("Node data file successfully generated in binary format.\n");
}
}
}Editor is loading...
Leave a Comment