|
|
// chunksize ist die Zeichenanzahl
using (StreamReader stream = new StreamReader(File.OpenRead(@"C:\BigFile.dat"))
{
char[] buffer = new char[chunksize];
while (stream.Peek() >= 0)
{
int readCount = stream.Read(buffer, 0, chunksize);
string result = new string(buffer, 0, readCount);
}
}
|
|
|
Bei 40GB funktioniert das aber leider nicht - oder irre ich mich?
– Bastler 14.03.2011
|
||
|
Mit 4.5GB keine Probleme. Es wird eine Datei geöffnet, der StreamReader läuft rüber, es werden immer nur die Anzahl Zeichen in result geschrieben, die über "chunksize" angegeben wurden.
– KHoffmann 14.03.2011
|
||
|
Sehr bedanken möchte ich mich schon jetzt für alle Bemühungen in meiner Sache! Morgen werde ich mich erst mal in "MemoryMappedFile-Klasse" einarbeiten, die mir unbekannt war. Anschließend werde ich mich wohl mal genauer mit StreamReader auseinandersetzen. Aus irgendeinem Grund hatte das "Ding" bei mir bisher versagt. Morgen, ab 20 Uhr, werde ich mich hoffentlich sehr bedanken, oder eine erweiterte Frage stellen.
– Bastler 14.03.2011
|
StreamReader sr = new StreamReader(File.OpenRead(@"c:\bigfile.dat"));
string actualLine = "";
while (!sr.EndOfStream)
{
actualLine = sr.ReadLine();
Console.WriteLine(actualLine);
}
|
|
Stream inRead = File.OpenRead(s1);
Stream kRead = File.OpenRead(s2);
Stream outWrite = File.Create(s3);
BufferedStream inStream = new BufferedStream(inRead);
BufferedStream kStream = new BufferedStream(kRead);
BufferedStream outStream = new BufferedStream(outWrite);
try
{
inStream.Position = kStream.Position = outWrite.Position = 0;
while(inStream.Position < inStream.Length )
// Verarbeitung
}
...
|
|
| 1 | ||
|
Also der Code macht für mich grade gar keinen Sinn.
Müsste die Bedingung im while nicht immer true sein, da im Endeffekt eine 0 gesetzt wird? Hinzu kommt zumindest für mich, dass ich mit dem Miniteil nicht wirklich erkennen kann, was Du damit bewirken willst. – KHoffmann 15.03.2011
|
||
|
Der Code läuft - er ist getestet. Die Schleife bricht korrekt ab. Arrays werden nicht benötigt. In d. Schleife läuft eine Berechnung ab, anschießend wird der Ergebniswert, der keine Übergröße erreichen kann, an der Position in den outStream geschrieben.
– Bastler 15.03.2011
|
||
|
Was heißt "hatte ich Schwierigkeiten"? Kam eine Exception oder ein nicht erwartetes Verhalten?
Und bitte editiere Deine Beiträge und mach nicht immer antworten, hier ist ja reines Chaos. – KHoffmann 15.03.2011
|
||
|
Ohne Fehlermeldung wurde das Programm kompiliert. Kleine Dateien, ca. 30MB, laufen zwar zeitaufwendig, aber fehlerfrei durch. Die genaue Grenze habe ich noch nicht ermitteln können, das Programm verhakt sich und arbeitet einfach nicht mehr.
– Bastler 15.03.2011
|
||
|
D.h. du weißt nicht, ob bspw. Arbeitsspeicher knapp ist? Ich habe so einen Fall noch nicht gehabt und ohne eine genaue Fehlerbeschreibung ist eine Hilfe relativ schwer. Mit dem von mir geposteten Code konnte ich problemlos Dateien bis zu 20GB verarbeiten.
Der Fehler liegt denk ich an Deinem Code. – KHoffmann 15.03.2011
|
||
|
Soeben hatte ich deinen Code bei mir getestet. Ich erhielt das selbe Ergebnis wie zuvor. Daraufhin habe ich mal meine Firewall ausgeschaltet und - ich glaube es nicht - beide Codes laufen auf einmal richtig!!! Eine Erklärung fällt mir dazu irgendwie nicht wirklich ein. Sehr dankbar bin ich allen, die mir geschrieben haben. Besonders erfreut war ich über den Link-Hinweis zu MemoryMappedFile!!! Ich werde jetzt keine Hilfe mehr benötigen und bedanke mich bei euch allen.
Mit herzlichen Grüßen Bastler – Bastler 15.03.2011
|
||
|
Hi Bastle,
von solchen Codes würde ich mir mehr wünschen. Ein Stream, der sich selbst hochzählt, ist selten anzutreffen.Die "Fake-Limitierung" in der while ist unschwer zu erkennen. Bitte schreib mehr Code. Solltest du woanders publizieren, gib einen Hinweis. – Bruno 16.03.2011
|
|
|
|
|
|
|
|
|
| 1 |
Wenn er die komplette Datei einlesen will hast Du recht.
Wenn ich aber nur die Datei öffne und mich in bestimmten Schritten im Dateistrom bewege, gibt es keinerlei Probleme. – KHoffmann 15.03.2011
|