Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Advanced Developers Conference     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: DOS und Win32-Konsole ::  Pfadhandling in Konsolenanwendungen  
Gehen Sie zu Seite 1, 2  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
Patrice079
Mitglied

Benutzerprofil
Anmeldungsdatum: 10.05.2008
Beiträge: 10
Beitrag Patrice079 Mitglied 08:57:06 01.09.2010   Titel:   Pfadhandling in Konsolenanwendungen            Zitieren

Hallo Experten,

habe eine Frage zum Pfadhandling in Windows-Konsolenanwendungen. Ich habe ein Tool geschrieben das als Parameter eine .txt-Datei übernimmt in der es Pfade von zu ladenden Dateien findet. Was ich nun nicht verstehe ist, dass wenn man die Release-exe mit dem Parameter über die Konsole startet gibt es keine Probleme. Zieht man aber die .txt mit der Maus auf die exe gibt es auf Win7 auch keine Probleme, bei XP allerdings stürzt das Programm ab, egal ob die Pfade absolut oder relativ sind. Wenn jemand Lust hätte mir die Ursache und evtl. eine Lösung zu erklären wäre ich sehr dankbar.

Info: geöffnet wir mit ( FILE * pFile = fopen(filename, "rb"); )

Viele Grüße
_matze
Mitglied

Benutzerprofil
Anmeldungsdatum: 31.07.2007
Beiträge: 9271
Beitrag _matze Mitglied 09:01:50 01.09.2010   Titel:              Zitieren

Was ist mit der Debug-exe unter XP mit Debugger? Was passiert dann?

_________________
Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?
patric079
Unregistrierter




Beitrag patric079 Unregistrierter 10:15:05 01.09.2010   Titel:              Zitieren

Bei der Parameter .txt mit relativen Pfaden springt er ordungsgemäß in das Exception-Handling für den Fall das pFile==Null und übergebe ich die absoluten Pfade schmiert alles ab ohne Meldung! ;(
_matze
Mitglied

Benutzerprofil
Anmeldungsdatum: 31.07.2007
Beiträge: 9271
Beitrag _matze Mitglied 11:44:13 01.09.2010   Titel:              Zitieren

patric079 schrieb:
Bei der Parameter .txt mit relativen Pfaden springt er ordungsgemäß in das Exception-Handling für den Fall das pFile==Null und übergebe ich die absoluten Pfade schmiert alles ab ohne Meldung! ;(


Ohne Meldung beim Debug-Build im Debugger? Sorry, das kann ich kaum glauben. :confused:

_________________
Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?
Patrice079
Mitglied

Benutzerprofil
Anmeldungsdatum: 10.05.2008
Beiträge: 10
Beitrag Patrice079 Mitglied 13:47:31 01.09.2010   Titel:              Zitieren

Doch ist leider so. Kanns mir auch nicht erklären, aber trotzdem Danke für Deinen Hilfeversuch. Bin leider nicht so der VS-Crack weswegen wahrscheinlich irgendwelche Einstellungen falsch sind. Habe mir fast gedacht das da nicht viel zu helfen ist.
Sqwan
Mitglied

Benutzerprofil
Anmeldungsdatum: 08.01.2006
Beiträge: 965
Beitrag Sqwan Mitglied 15:57:50 01.09.2010   Titel:              Zitieren

Tuh uns allen nen Gefallen und gib uns etwas mehr von deinem Code. Vllt liegts ja doch dran.
Wie beispielsweise sieht "filname" aus?

Wenn du nur ließt, nimm mal nur "r"?

Und dann kopier mal nur die Stellen in ein Extraprogramm bei denen du denkst, dass es daran liegt. Grenz den fehler ein bis du die Zeile hast die den Fehler produziert. Dann weißt du woran du arbeiten musst!

_________________
"Besser" impliziert "Anders" aber "Anders" impliziert noch lange nicht "Besser"
Die alte Kuh so schnell vergisst, dass sie selbst mal Kalb gewesen ist!
Patrice079
Mitglied

Benutzerprofil
Anmeldungsdatum: 10.05.2008
Beiträge: 10
Beitrag Patrice079 Mitglied 17:34:47 01.09.2010   Titel:              Zitieren

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
DataSourceRaw::DataSourceRaw(char* filename, int x, int y, int numberOfFrames)
{
  type = ONE_DIMENSIONAL;
 
    currentFrameNumber = 0;
    xRes = x;
    yRes = y;
    frames = numberOfFrames;


    FILE * pFile = fopen(filename, "rb");
    std::string fileName = filename;

    int fileType = checkForFileType(fileName);


      data1 = (float*) malloc(sizeof(float) * y * x * frames);

      if (fileName == "")
      {
          std::cout << "no data file loaded" << std::endl;
            for(int i=0; i<y * x * frames; i++) { data1[i] = 0.0; }
      }
      else
      {
          try
          {   
            if(pFile==NULL)
            {
                std::string str = "An error occured when trying to open height or slope file.";

                switch(fileType)
                {
                    case 1:
                        str = "An error occured when trying to open height file.";
                        throw str;
                        break;
                    case 2:
                        str = "An error occured when trying to open x-slope  file.";
                        throw str;
                        break;
                    case 3:
                        str = "An error occured when trying to open y-slope  file.";
                        throw str;
                        break;
                    default:
                        throw str;
                }
            }
        }
        catch(std::string e)
        {
            std::cout << e << std::endl;
            system("Pause");
            exit(1);
        }
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
DataSourceRaw::DataSourceRaw(char* filename, int x, int y, int numberOfFrames)
{
type = ONE_DIMENSIONAL;

currentFrameNumber = 0;
xRes = x;
yRes = y;
frames = numberOfFrames;


FILE * pFile = fopen(filename, "rb");
std::string fileName = filename;

int fileType = checkForFileType(fileName);


data1 = (float*) malloc(sizeof(float) * y * x * frames);

if (fileName == "")
{
std::cout << "no data file loaded" << std::endl;
for(int i=0; i<y * x * frames; i++) { data1[i] = 0.0; }
}
else
{
try
{
if(pFile==NULL)
{
std::string str = "An error occured when trying to open height or slope file.";

switch(fileType)
{
case 1:
str = "An error occured when trying to open height file.";
throw str;
break;
case 2:
str = "An error occured when trying to open x-slope file.";
throw str;
break;
case 3:
str = "An error occured when trying to open y-slope file.";
throw str;
break;
default:
throw str;
}
}
}
catch(std::string e)
{
std::cout << e << std::endl;
system("Pause");
exit(1);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
DataSourceRaw::DataSourceRaw(char* filename, int x, int y, int numberOfFrames)
{
  type = ONE_DIMENSIONAL;
 
    currentFrameNumber = 0;
    xRes = x;
    yRes = y;
    frames = numberOfFrames;


    FILE * pFile = fopen(filename, "rb");
    std::string fileName = filename;

    int fileType = checkForFileType(fileName);


      data1 = (float*) malloc(sizeof(float) * y * x * frames);

      if (fileName == "")
      {
          std::cout << "no data file loaded" << std::endl;
            for(int i=0; i<y * x * frames; i++) { data1[i] = 0.0; }
      }
      else
      {
          try
          {   
            if(pFile==NULL)
            {
                std::string str = "An error occured when trying to open height or slope file.";

                switch(fileType)
                {
                    case 1:
                        str = "An error occured when trying to open height file.";
                        throw str;
                        break;
                    case 2:
                        str = "An error occured when trying to open x-slope  file.";
                        throw str;
                        break;
                    case 3:
                        str = "An error occured when trying to open y-slope  file.";
                        throw str;
                        break;
                    default:
                        throw str;
                }
            }
        }
        catch(std::string e)
        {
            std::cout << e << std::endl;
            system("Pause");
            exit(1);
        }


'rb' brauche ich weil die files binaries mit floats sind.
Eingrenzen fällt mir schwer, da ja eigentlich alles funktioniert, außer eben wenn ich die config-file direkt auf die exe ziehe und das auch nur bei XP. Vorallem mysteriös ist, dass eben bei relativen Pfaden der try Block reagiert und bei absoluten nicht!


Zuletzt bearbeitet von Patrice079 am 17:41:26 01.09.2010, insgesamt 1-mal bearbeitet
Sqwan
Mitglied

Benutzerprofil
Anmeldungsdatum: 08.01.2006
Beiträge: 965
Beitrag Sqwan Mitglied 10:28:10 02.09.2010   Titel:              Zitieren

Und jetzt kommentier schrittweise das aus bis der fehler auftritt.
Da wo er auftritt merkst dir kopierst das in ein zweitprojekt und guckst mal was passiert.

Die art wie es auftritt ist allerdings schon seltsam. Musst dir mal ausgeben lassen was im programm ankommt wenn du die datei drauf ziehst bevor es zum fehler kommt.

_________________
"Besser" impliziert "Anders" aber "Anders" impliziert noch lange nicht "Besser"
Die alte Kuh so schnell vergisst, dass sie selbst mal Kalb gewesen ist!
Doug_HH
Mitglied

Benutzerprofil
Anmeldungsdatum: 30.09.2007
Beiträge: 471
Beitrag Doug_HH Mitglied 23:27:53 08.09.2010   Titel:              Zitieren

Ist nicht ganz so mein Gebiet, aber der Catch-Block sieht komisch aus.

C/C++ Code:
 catch(std::string e)
C/C++ Code:
catch(std::string e)
C/C++ Code:
 catch(std::string e)


Ich kenne das so...

C/C++ Code:
catch(exception e)
C/C++ Code:
catch(exception e)
C/C++ Code:
catch(exception e)


Das er einfach nicht in den Block springt, weil diese Exception da nicht passt!?

Oder liege ich da falsch?

Gruß

_________________
The next time you think you are perfect, try walking on water.
www.rb-softarticle.com
feilensystem
Unregistrierter




Beitrag feilensystem Unregistrierter 07:32:08 10.09.2010   Titel:              Zitieren

das problem ist also dass der dateiname beim "auf die exe ziehen" falsch übergeben wird?

hast du schonmal versucht dir einfach die übergebenen parameter anzeigen zu lassen?
also cout << filename

bzw cout << argv[i] mit i in einer schleife, gibt das dann unterschiede auf den verschiedenen os?
C/C++ Forum :: DOS und Win32-Konsole ::  Pfadhandling in Konsolenanwendungen  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.