Я использую приведенный ниже код, чтобы разбить поток на более мелкие части. однако размер моего фрагмента постоянен, и я хочу, чтобы он был переменной. Я хочу, чтобы программа читала, пока не наберет символ '$' и не сделает '$ позицию размером блока.
Например: скажем, файл txt содержит 01234583145329 $ 34212349 $ 2134567009 $, поэтому мой 1-й размер блока должен быть 14, второе должно быть 8, а третье должно быть 10. Я провел небольшое исследование и выяснил, что можно достичь с помощью метода indexof, но я не могу реализовать это с помощью приведенного ниже кода. Пожалуйста, сообщите.
Если есть другой эффективный способ, кроме Indexof, дайте мне знать.
public static IEnumerable<IEnumerable<byte>> ReadByChunk(int chunkSize)
{
IEnumerable<byte> result;
int startingByte = 0;
do
{
result = ReadBytes(startingByte, chunkSize);
startingByte += chunkSize;
yield return result;
}
while (result.Any());
}
public static IEnumerable<byte> ReadBytes(int startingByte, int byteToRead)
{
byte[] result;
using (FileStream stream = File.Open(@"C:\Users\file.txt", FileMode.Open, FileAccess.Read, FileShare.Read))
using (BinaryReader reader = new BinaryReader(stream))
{
int bytesToRead = Math.Max(Math.Min(byteToRead, (int)reader.BaseStream.Length - startingByte), 0);
reader.BaseStream.Seek(startingByte, SeekOrigin.Begin);
result = reader.ReadBytes(bytesToRead);
int chunkSize = Index of
}
return result;
}
static void Main()
{
int chunkSize = 8;
foreach (IEnumerable<byte> bytes in ReadByChunk(chunkSize))
{
//more code
}
}