ユーザーが非常に大きな(GB)ファイルを使用してもプログラムの速度を維持できるように、ファイルをチャンクでロードするために数日間試みてきました。現在、私は次のコードを持っています:
using (FileStream filereader = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
using (StreamReader reader = new StreamReader(filereader))
{
while (toRead > 0 && (bytesread = reader.Read(buffer, offset, toRead)) > 0)
{
toRead -= bytesread;
offset += bytesread;
}
if (toRead > 0) throw new EndOfStreamException();
foreach (var item in buffer)
{
temporary = temporary += item.ToString();
}
temporary.Replace("\n", "\n" + System.Environment.NewLine);
以下は、混乱を避けるための宣言です (うまくいけば):
const int Max_Buffer = 5000;
char[] buffer = new char[Max_Buffer];
int bytesread;
int toRead = 5000;
int offset = 0;
現時点では、プログラムは 5000 バイトのテキスト ファイルを読み取り、そのバイトを処理して文字列に変換し、それを文字列リーダーに渡して、必要な情報を取得できるようにします。
現時点での問題は、バッファーが行の途中で停止する可能性があるため、stringreader クラスでデータを取得すると、インデックス/長さのエラーが発生することです。
私が必要とするのは、配列をシークして行の開始を示す特定の文字セットを見つけ、そのポイントの前のデータのみを文字列に処理する方法を知ることです。
シークバックの問題をソートした後のもう 1 つの問題は、処理したくないデータを保持し、バッファを埋めるためにさらにデータを取り込む方法です。
これがよく説明されていることを願っています。誰かが助けてくれることを願って時々混乱することがあります。