Вставка числа на случайную позицию в двоичный файл
Всем привет! В общем, необходимо на случайно заданную позицию, получившегося файла в мейне, вставить пользователем заданное число. Не получается это сделать, буду рад любой помощи, хотя бы какой-то статейке про двоичные файлы. Код по сути не рабочий(в мейне все работаетб остальное работает криво), но вдруг, по нему все-таки можно будет что-то подсказать. Заранее всем спасибо за ответы)
static void bRemove(string path, byte n, string ReadStr)
{
string FileRead = "";
bool flag = true;
Random rnd = new Random();
BinaryWriter Writer = new BinaryWriter(File.Open(path, FileMode.OpenOrCreate));
Writer.BaseStream.Position = rnd.Next(0, ReadStr.Length);
//Writer.Seek(rnd.Next(0, ReadStr.Length), SeekOrigin.Begin);
while (flag)
{
if ((Writer.BaseStream.Position.Equals(' ')) || (Writer.BaseStream.Position.Equals(',')))
{
Writer.BaseStream.Position = rnd.Next(0, ReadStr.Length);
}
else
{
Writer.Write(n);
flag = false;
}
}
Writer.Close();
BinaryReader bRead = new BinaryReader(File.Open(path, FileMode.Open));
while (bRead.PeekChar() > -1)
{
FileRead = bRead.ReadString();
}
bRead.Close();
var result = FileRead.Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < result.Length; i++)
{
Console.WriteLine(result[i]);
}
Console.WriteLine(FileRead);
}
static void Main()
{
double sum = 0, n;
byte UserNum;
string ReadStr = "";
string path = @"D:\New.dat";
BinaryWriter bWrite = new BinaryWriter(File.Open(path, FileMode.OpenOrCreate));
bWrite.Write("2, 3, 0, 2, 5, 7");
bWrite.Close();
BinaryReader bRead = new BinaryReader(File.Open(path, FileMode.Open));
while (bRead.PeekChar() > -1)
{
ReadStr = bRead.ReadString();
}
bRead.Close();
Console.WriteLine(ReadStr);
var result = ReadStr.Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < result.Length; i++)
{
n = double.Parse(result[i]);
sum += Math.Pow(n, 2);
}
Console.WriteLine($"\n {sum}");
Console.Write("Введите число: ");
UserNum = byte.Parse(Console.ReadLine());
bRemove(path, UserNum, ReadStr);
}
Ответы (1 шт):
Пример с использованием FileStream.
Сперва я создаю файл и заполняю его десятью байтами.
Потом вывожу его содержимое.
Затем на случайную позицию вставляется новое значение.
После чего снова выводим содержимое файла, чтобы убедиться в изменениях.
// Создаём файл и заполняем числами
using (var fileStream = new FileStream("test.bin", FileMode.Create))
{
for (byte b = 0; b < 10; b++)
fileStream.WriteByte(b);
}
// Смотрим содержимое файла
using (var fileStream = new FileStream("test.bin", FileMode.Open))
{
var bytes = new byte[fileStream.Length];
fileStream.Read(bytes, 0, bytes.Length);
Console.WriteLine(string.Join(",", bytes));
}
// Изменяем содержимое файла
var random = new Random();
byte number = 255; // число, полученное от пользователя
using (var fileStream = new FileStream("test.bin", FileMode.Open))
{
// Генерируем случайную позицию
int offset = random.Next(0, (int)fileStream.Length);
// Устанавливаем указатель потока на эту позицию
fileStream.Seek(offset, SeekOrigin.Begin);
// Пишем в эту позицию число
fileStream.WriteByte(number);
}
// Смотрим содержимое файла
using (var fileStream = new FileStream("test.bin", FileMode.Open))
{
var bytes = new byte[fileStream.Length];
fileStream.Read(bytes, 0, bytes.Length);
Console.WriteLine(string.Join(",", bytes));
}
Вывод:
0,1,2,3,4,5,6,7,8,9
0,1,2,3,4,5,6,255,8,9
Число 255 будет на случайной позиции.
Код с применением BinaryWriter будет почти такой же.