Zdravim,
mám takovej banální problém a mám asi výpadek, ale nechápu proč to nejde.
Mám normální UTF8 textovej soubor, kde je obsah třeba toto a potřebuju zjistit aktuální pozici pouze těch řádků, které začínají pomlčkou "-"
fsdfsddfdfsdfsa
-sdfsafsf
fsd
-sdfsdaf
fsadf
-sdafsa
pro ukázku zjištění pozic mám toto
List<int> positions = new List<int>(); // pozice radku, co zacinaji "-"
int actualPosition = 0;
// soubor musí být v UTF8
using (StreamReader sr = new StreamReader(File.OpenRead(path), Encoding.UTF8))
{
sr.BaseStream.Seek(0, SeekOrigin.Begin);
while (!sr.EndOfStream)
{
string line = await sr.ReadLineAsync(); // přečte řádek
if (ContainsValideKey(line)) // pokud řádek začíná "-" + další prvky...
{
positions.Add(actualPosition);
}
actualPosition += line.Length; // i když jsem přidal +1 jako "\n", tak to nejde podle představ
}
}
a pro vypsání pozic toto (nechci zbytecne prochazet celej soubor, ale pouze ty radky, ktere zacinaji "-" a pozice jsem jsi zjistil vyse
using (StreamReader sr = new StreamReader(File.OpenRead(path), Encoding.UTF8))
{
for (int i = 0; i < positions.Count; i++)
{
// zde chci precist pouze radky, ktery zacinaji "-" podle offsetu
sr.BaseStream.Seek(positions[i], SeekOrigin.Begin);
string line = await sr.ReadLineAsync();
Console.WriteLine(positions[i] + ") " + line);
}
}
Bohužel to vůbec nefunguje jak jsem očekával, i když jsem řádek převedl na byte[] a přičetl součet, tak taky ne a vlastnost Position co je BaseStreamu mi vždy vrátí maximální pozici v souboru