Thiseas δε διαφωνώ. Άλλα μην είμαστε τόσο σκληροί.
Μακάρι να είχα και εγώ ένα τέτοιο forum και internet όταν ξεκίνησα.
Ένας από τους δύο μου κουμπάρους (ήμασταν συγκάτοικοι... στη τρέλα) που είπα μια μέρα να αγοράσει ένα Η/Υ. Η απάντηση του ήταν:
Τι να τον κάνω εγώ; 
Στο τέλος τον έπεισα και αγόρασε έναν.
Επειδή κατά τι διάρκεια της εκμαθήσεις του είχε την απάντηση άμεσα, τώρα είναι εργαλείο της δουλεία του και δε μπορεί να κάνει χωρίς αυτό.
Από τη άλλη μεριά ο άλλος μου κουμπάρος (ήμαστε έξαλλου στην εποχή της κουμπαριάς) πήγαινε στο καθηγητή του (πολύ γνωστός για τα μεγάλα έργα που έχει κάνει) και του ζητούσε βοήθεια και κάθε φορά η απάντηση ήταν: Σκέψου.
Αυτά τα δύο δεν άκρως αντίθετα;
Τώρα Valxalas σου έχω κώδικα και ένα bug, να το δω θα το βρεις;
public enum Action
{
DeleteTheFirstLine,
DeleteEmptyLines,
DeleteTheLastLine,
ReadLastLines
}
public class TextFileProcessor
{
readonly bool deleteEmptyLines, deleteTheFirstLine, deleteTheLastLine;
readonly string inFileName;
readonly ICollection<string> lines = new Collection<string>();
readonly string outFileName;
readonly bool readLastLines;
readonly bool showLinesInConsole;
string line;
int lineNumber;
int? linesCount = null;
int numberOfLines;
public TextFileProcessor(string inFileName, string outFileName, ICollection<Action> actions, bool showLinesInConsole) {
if (actions == null) throw new ArgumentNullException("actions");
this.inFileName = inFileName;
this.outFileName = outFileName;
this.showLinesInConsole = showLinesInConsole;
deleteEmptyLines = actions.Contains(Action.DeleteEmptyLines);
deleteTheFirstLine = actions.Contains(Action.DeleteEmptyLines);
deleteTheLastLine = actions.Contains(Action.DeleteTheLastLine);
readLastLines = actions.Contains(Action.ReadLastLines);
}
void Init() {
if (!File.Exists(inFileName)) throw new OperationCanceledException(string.Format(CultureInfo.CurrentCulture, "{0} does not exist.", inFileName));
if (File.Exists(outFileName)) throw new OperationCanceledException(string.Format(CultureInfo.CurrentCulture, "{0} does exist.", outFileName));
if (deleteTheLastLine || readLastLines) linesCount = CountLines();
if (readLastLines) lines.Clear();
}
public void DeleteActions() {
Init();
Processor();
}
public ICollection<string> ReadLastLines(int numberOfLines) {
this.numberOfLines = numberOfLines;
Init();
Processor();
return lines;
}
void Processor() {
lineNumber = 0;
using (StreamReader sr = new StreamReader(inFileName, Encoding.Default))
using (StreamWriter sw = new StreamWriter(outFileName, true, Encoding.Default)) {
while ((line = sr.ReadLine()) != null) {
if (deleteEmptyLines && string.IsNullOrEmpty(line)) continue;
if (deleteTheFirstLine && ++lineNumber == 1) continue;
if (deleteTheLastLine && linesCount.HasValue && linesCount.Value == lineNumber) continue;
if (readLastLines && linesCount.HasValue && (linesCount.Value - numberOfLines) == lineNumber) lines.Add(line);
sw.WriteLine(line);
if (showLinesInConsole) Console.WriteLine(line);
}
sr.Close();
if (showLinesInConsole) Console.WriteLine(Environment.NewLine + "Total lines: {0}", lineNumber);
}
}
int CountLines() {
lineNumber = 0;
using (StreamReader sr = new StreamReader(inFileName, Encoding.Default)) {
while ((line = sr.ReadLine()) != null) {
if (deleteEmptyLines && string.IsNullOrEmpty(line)) continue;
lineNumber++;
}
}
return lineNumber;
}
}
while (!dead) learn();