Problem mit StreamWriter



  • Hallo

    Zuerstmal, ich bin C++ Neuling. Ich bin im moment gerade daran mich mit dem Buch Visual C++ 2008 von Dirk Louis in dieses Thema einzuarbeiten.

    Nun wollte ich mein erstes "Programm" schreiben. Damit ihr versteht der nachfolgende Code machen sollte 😞 , eine kurze Einleitung.

    Ich habe mir vor kurzem ein neues Handy gekauft. Die Software meines alten Handys, kann die Kontaktliste jedoch nur in einer einzigen Datei auf dem Pc abspeichern

    BEGIN:VCARD
    VERSION:2.1
    FN:Name 
    N: Vorname
    TEL;CELL;VOICE:Nummer
    END:VCARD
    
    BEGIN:VCARD
    VERSION:2.1
    FN:Name 
    N: Vorname
    TEL;CELL;VOICE:Nummer
    END:VCARD
    
    .
    .
    .
    

    und so weiter, jeweils durch END:VCARD getrennt.

    Die Software meines neuen Handys kann nur Dateien Importieren, die nur einen Kontakt pro Datei haben, dafür aber mehrere solche Datein gemeinsam.

    Also wollte ich mir ein kleines Programm schreiben, das die Kontakte einliest, und dann einzeln wieder in jeweils neue Datein schreibt. Aber . . .

    // vCard.cpp: Hauptprojektdatei.
    
    #include "stdafx.h"
    
    using namespace System;
    using namespace System::IO;
    
    int main()
    {
    	try
    	{
    
    	Console::Write("Dateiname: ");
    	String ^dateiname = Console::ReadLine();
    	int vCard = 1;
    	String ^zeile;
    
    	StreamReader ^datei = gcnew StreamReader(dateiname);
    
    	StreamWriter ^ausgabe = gcnew StreamWriter("C:\\Users\\Dominic\\Desktop" + vCard + ".vcf");
    
    	while(datei->Peek() != -1)
    	{
    		zeile = datei->ReadLine();
    		ausgabe->WriteLine(zeile);
    
    		if( (String::Compare(zeile, "END:VCARD" )) == 0 )
    		{
    			ausgabe->Close();
    			vCard++;
    			StreamWriter ^ausgabe = gcnew StreamWriter("C:\\Users\\Dominic\\Desktop" + vCard + ".vcf");
    
    		}
    
    	}
    
    	ausgabe->Close();
    	datei->Close();
    	}
    
    	catch (IOException ^e)
    	{
    		Console::WriteLine("Fehler mit Datei: " + e->Message);
    	}
        return 0;
    }
    

    Die Datei 1.vcf wird korekkt angegelegt und befüllt, die Datei 2.vcf wird angelegt aber nicht befüllt, hier stürzt das Programm jedes mal ab 😞 😡

    Der MS debugger meldet: In einen geschlossenen TextWriter kann nicht geschreiben werden 😕 😕 😕

    Vielen Dank im Voraus!

    mfg



  • Ups, ich merke gerade das der Thread im falschen bereich ist 🙄

    Sorry!



  • *push*



  • Hallo,

    etwas geändert (Leerzeilen werden nicht berücksichtigt) könnte das so aussehen:

    #include "stdafx.h" 
    
    using namespace System; 
    using namespace System::IO; 
    
    int main() 
    { 
        try 
        { 
    
        Console::Write("Dateiname: "); 
        String ^dateiname = Console::ReadLine(); 
        int vCard = 0; 
        String ^zeile; 
    
        StreamReader ^datei = gcnew StreamReader(dateiname); 
    
        StreamReader ^ausgabe;
    
        while(datei->Peek() != -1) 
        { 
            zeile = datei->ReadLine();
    
            if (zeile->Length != 0)
            {
                if ((String::Compare(zeile, "BEGIN:VCARD" )) == 0) 
                { 
                   ++vCard; 
                   ausgabe = gcnew StreamWriter("C:\\Users\\Dominic\\Desktop" + vCard + ".vcf");
    
                }
    
                ausgabe->WriteLine(zeile);
    
                if ((String::Compare(zeile, "END:VCARD" )) == 0)
                {
                    ausgabe->Close();
                }
    
            }
    
        } 
    
        datei->Close(); 
        } 
    
        catch (IOException ^e) 
        { 
            Console::WriteLine("Fehler mit Datei: " + e->Message); 
        } 
        return 0; 
    }
    

    MfG,

    Probe-Nutzer



  • Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten