Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Was stimmt nicht?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
01.10.2009, 14:49 Uhr
d0t




C++:
#include "stdafx.h"
#include <iostream>
#include <cstdio>
#include <string>
#include <fstream>

using namespace std;

int isfrom = 0;
int isto = 0;

int main(int argc, char* argv[])
{

    for (int x = 1;x < argc; x++)
    {
    
        if (argv[x] == "-get")
        {
            cout << "FROM>" << argv[x++] << endl;
            isfrom = x++;
        }

        else if (argv[x] == "-to")
        {
            cout << "  TO>" << argv[x++] << endl;
            isto = x++;
        }

        cout << "test " << x << ": " << argv[x] << endl;
    }

    ifstream datei(argv[isfrom]);
    if( !datei ) throw "Fehler beim Öffnen!";

    string text;
    datei >> text;

        ofstream fout(argv[isto]);
        fout << text;

    datei.close();

    return 0;
}


Charset oder wie das heißt habe ich auf Multibyte gesetzt!

Was stimmt nicht?

Vielen Dank im Voraus!

d0t

Dieser Post wurde am 01.10.2009 um 19:09 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
01.10.2009, 15:00 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Hmm also programieren ist bei mir schon ein paar Jahre her aber so auf den ersten Blick würde ich mal sagen das hier...



Zitat:

if (argv[x] == "-get")


ist gar nicht gut...

argv[x] liefert dir nen Zeiger auf nen Speicherbereich in dem sich das von dir gewünschte versteckt. Der Zeiger selbst ist aber nur eine Zahl/Adresse und daher kannst du nicht mit "-get" vergleichen. Guck dir mal strcmp (so hieß das glaube ich) an...

Gruß Windi...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 01.10.2009 um 15:00 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
01.10.2009, 15:24 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



C++:
      cout << "FROM>" << argv[x++] << endl;
            isfrom = x++;



das hier ist auch etwas "interessant"

nehmen wir mal an, du startest das programm mit

prog -from b c

nehmen wir mal weiterhin an, argv[x] würde nun vor den 2 zeilen auf "-from" zeigen, d.h er würde dir

FROM> b

ausgeben, jedoch argv[isfrom] zeigt dir auf "c" und nicht wie von dir gewünscht "b"

du solltest also lieber genau überprüfen, wo du "x+1" und wo du "x++" schreibst.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
01.10.2009, 18:36 Uhr
d0t



wow... okay einen Fehler behoben...

... aber einer bleibt nocht...!!!

also vielleicht liegt dass am typ des inhaltes von
argv? hab ja das projekt auf Multi-Byte-Zeichensatz
umgestellt =P


C++:
#include "stdafx.h"
#include <iostream>
#include <cstdio>
#include <string>
#include <fstream>

using namespace std;

double fromfile;
double tofile;

int main(int argc, char* argv[])
{

    for (int x = 1;x < argc; x++)
    {
    
        if (argv[x] == "-get")
        {
            cout << "FROM>" << argv[x+1] << endl;
            fromfile = x+1;
        }

        else if (argv[x] == "-to")
        {
            cout << "  TO>" << argv[x+1] << endl;
            tofile = x+1;
        }

        // cout << "test " << x << ": " << argv[x] << endl;

    }

/*
        ifstream datei(argv[fromfile]);
    
    if( !datei ) throw "Fehler beim Öffnen!";

    string text;
    datei >> text;

        ofstream fout(argv[tofile]);
        
        fout << text;

    datei.close();
*/


    return 0;
}


nehme ich in der Zeile


C++:
// cout << "test " << x << ": " << argv[x] << endl;


das Kommi weg, zeigt er mir nacheinander alle Inhalte...
lasse ich die Anwendung schrittweise ausführen,
übergeht er komplett die if-anweisungen...


C++:
if (argv[x] == "-get")
        {
            cout << "FROM>" << argv[x+1] << endl;
            fromfile = x+1;
        }

        else if (argv[x] == "-to")
        {
            cout << "  TO>" << argv[x+1] << endl;
            tofile = x+1;
        }


als wenn er inhalt, den das proggi mir als der anzeigt
der er auch sein soll, gleichzeitig nicht der ist, der er
sein soll! =D

Liebe Grüße,
d0t
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
01.10.2009, 18:48 Uhr
0xdeadbeef
Gott
(Operator)


Lies noch mal das durch, was Windalf geschrieben hat.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
01.10.2009, 19:07 Uhr
d0t



ahh vielen Dank... das läuft jetzt!

Ich arbeite also auf C

die quelle existiert, und heißt 'quelle.txt', mit dem Inhalt "Dies ist ein Test! 1234567890"
das ziel existiert NICHT.

gehe ins gehe ins cmd, und gebe ein:


Code:
programm.exe -get quelle.txt -to ziel.txt


erstellt er mir die ziel.txt,...

leider nur mit dem ersten Wort der Datei quelle.txt: "Dies"

der aktuelle Code lautet:


C++:
#include "stdafx.h"
#include <iostream>
#include <cstdio>
#include <string>
#include <fstream>

using namespace std;

int fromfile;
int tofile;

string inhalt;

int main(int argc, char* argv[])
{

    for (int x = 1;x < argc; x++)
    {
    
        if (strcmp(argv[x], "-get") == 0)
        {
            cout << "FROM>" << argv[x+1] << endl;
            fromfile = x+1;
        }

        else if (strcmp(argv[x], "-to") == 0)
        {
            cout << "  TO>" << argv[x+1] << endl;
            tofile = x+1;
        }

        // cout << "test " << x << ": " << argv[x] << endl;

    }


        ifstream quelle(argv[fromfile]);
    
    if( !quelle ) throw "Fehler beim Öffnen!";

    quelle >> inhalt;

        ofstream ziel(argv[tofile]);
        
    ziel << inhalt;

    quelle.close();
    ziel.close();

    return 0;
}


Danke für's aushalten!!! :-D

Liebe Grüße,
d0t
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
01.10.2009, 19:13 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


du liest ja auch nur ein wort raus.

was du sinnvollerweise tun musst ist:

lese mit quelle.read(...) immer blöcke, bis quelle am ende ist (denke read dürfte dir da auch schon anhaltspunkte liefern, bzw spätestens quelle.eof)
schreibe dann jeweils mit ziel.write(...) den ausgelesenen block in die neue datei.

Für sowas empfiehlt sich jedoch, damits auch mit binärdateien funktioniert, die dateien als binär zu öffnen.

und nochwas fällt mir grad auf.

ruf dein programm mal ohne parameter auf *g*
--
class God : public ChuckNorris { };

Dieser Post wurde am 01.10.2009 um 19:13 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
01.10.2009, 19:41 Uhr
0xdeadbeef
Gott
(Operator)


Die einfachere Methode wäre natürlich

C++:
ziel << quelle.rdbuf();


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
01.10.2009, 21:09 Uhr
d0t



Läuft! vielen Dank an Alle!!!!!!

Hier der Code...


C++:
#include "stdafx.h"
#include <iostream>
#include <cstdio>
#include <string>
#include <fstream>

using namespace std;

    int fromfile;
    int tofile;

    string fromfiletext;
    string tofiletext;

    string inhalt;
    ifstream quelle;

int main(int argc, char* argv[])
{

    if(argc<=1)
    {
        return 0;
    }

    for (int x = 1;x < argc; x++)
    {
    
        if (strcmp(argv[x], "-get") == 0)
        {
            cout << "FROM>" << argv[x+1] << endl;
            fromfile = x+1;
        }

        else if (strcmp(argv[x], "-to") == 0)
        {
            cout << "  TO>" << argv[x+1] << endl;
            tofile = x+1;
        }

    }

    fromfiletext = argv[fromfile];
    tofiletext = argv[tofile];

    quelle.open(fromfiletext.c_str(), ios::binary);

        if (!quelle)

        {

            cerr << fromfiletext

            << " kann nicht geöffnet werden!\n";

            exit(-1);

        }

    ofstream ziel(tofiletext.c_str(), ios::binary);

        if (!ziel)

        {

            cerr << tofiletext

            << " kann nicht geöffnet werden!\n";

            exit(-1);

        }

    char ch;

    while (quelle.get(ch))

    ziel.put(ch);

    return 0;

}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
02.10.2009, 16:16 Uhr
0xdeadbeef
Gott
(Operator)



C++:
#include <fstream>

int main(int argc, char *argv[]) {
  if(argc < 3) {
    return -1;
  }

  std::ifstream in (argv[1]);
  std::ofstream out(argv[2]);

  out << in.rdbuf();

  return !(out && in);
}



--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: