| Autor |
Nachricht |
Patrice079
Mitglied
Benutzerprofil
Anmeldungsdatum: 10.05.2008
Beiträge: 10
|
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: 9275
|
_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
|
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: 9275
|
_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. |
_________________ Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?
|
|
 |
Patrice079
Mitglied
Benutzerprofil
Anmeldungsdatum: 10.05.2008
Beiträge: 10
|
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
|
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
|
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
|
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
|
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
|
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? |
|
|
|
 |