私はMS-Visual Studio 2015を使用しており、C#でWinformsアプリケーションを開発しています。テキストファイルを読み込んでその行に書き込む方法は?
読者&投稿者は、UTF-8コーディングでCSVファイルを開き、行の行を読み込みます。私のプログラムは実際に行を読み、セミコロン(;)で分割し、その情報をデータベースに送ります。 これで、すでに読み込まれている行に、テキストまたは特別な記号を追加してマークする必要があります。 (「読んだ」または「完了しました」または「§$%」)。
誰か(ERPシステム)がそのCSVファイルに新しいデータを追加する可能性があるためです。したがって、次回のプログラムでは、そのファイルを繰り返し処理するときに、私の特別なマークなしで行を読み上げるだけです。
私のプログラム:
foreach (string sFile in Directory.GetFiles(sImportPfad, "*.*", SearchOption.TopDirectoryOnly))
{
var oStream = new FileStream(sFile, FileMode.Append, FileAccess.Write, FileShare.Read);
var iStream = new FileStream(sFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
var sw = new System.IO.StreamWriter(oStream);
var sr = new System.IO.StreamReader(iStream);
int c = 0;
// alle Zeilen jedes Files laden
while (!sr.EndOfStream)
{
String line = sr.ReadLine();
String[] splitLine = line.Trim().Split(txtDivider.Text.Trim().ToCharArray());
if (line.Contains("§$%"))
break;
DatenbankEintragAuftragsPool dbEintrag = new DatenbankEintragAuftragsPool();
foreach (myImportFilterObject ob in arrImportFilterObjects)
{
.
.
.
}
String result = Program.myPaletti.AuftragInDieDatenbankSchreiben(dbEintrag);
if (result.Equals("ok"))
{
sw.WriteLine(line + " §$%"); sw.Flush();
}
}
}
私の問題は、ライターが私のファイルの末尾に行+「特別なマークを」追加されています。
さらに、私はUTF-8コーディングでファイルを読み込む方法を理解していませんでした。
私はあなたの答えをありがとう!
EDIT:##############
このコードは、トリックを行うだろう...
string[] lines = System.IO.File.ReadAllLines("test");
lines[0] = lines[0] + " $%&"; /* replace with whatever you need */
System.IO.File.WriteAllLines("test", lines);
しかし、私の使用のためにそれはにお勧めしませんすべての行を読んでください。その人は今後20年間はデータを削除しない可能性があるからです。
私はラインによって溶液ラインを見つけるために、さらに行くよ...
は
新しいStreamReader(stream、Encodiing.UTF8)のようなエンコーディングでStreamReaderを作成できます。しかし、ファイルの途中に何かを追加することはできませんが、データを上書きすることはできます。しかし、あなたの作家がファイルにデータを追加するだけなので、あなたが読んでいない最初のレコードの位置を(ファイル内に)保存するほうが良いかもしれません。 – Casperah
@Casperah:最初の未読の行の位置を保存すると思います一貫性がない。特別な位置でデータを上書きするにはどうすればよいですか? – prototype0815
ファイル全体を読み込み、変更する行(メモリ内)を変更してファイルに書き戻します。ファイルが大きすぎて一度にメモリに読み込めない場合は、一度に1行を読み込んで、新しいファイルに書き戻してから次の行に移動してください。 –