.bat startet nicht
-
im dialog gibt es zwei botton´s, ok und abrechen, und eine eingabefeld. man fühlt das eingabefeld aus und drückt ok, dann werden die informationen aus dem eingabefeld in eine .bat geschrieben und die .bat gestartet. (siehe code am anfang.) die .bat start nicht. leg ich das starten der .bat auf den abbrechenbutton startet die .bat auch. warum???
void Waehlen::OnOK()
{
UpdateData(true);
CFile cf;
if (cf.Open( "DEV_quake.bat", CFile::modeWrite ) )
{
char szData[255];
strcpy((char*)szData, m_pfad);
try
{
cf.SeekToBegin();
cf.Write( szData, strlen( szData ) );
}
catch( CFileException *e )
{
e->Delete();
}
}
::ShellExecute(m_hWnd,"open", "DEV_quake.bat", 0, 0, SW_SHOWNORMAL );
CDialog::OnOK();}
void Waehlen::OnCancel()
{
::ShellExecute(m_hWnd,"open", "DEV_quake.bat", 0, 0, SW_SHOWNORMAL );
CDialog::OnCancel();
}
-
Also fangen wir jetzt das Thema wohl nochmal von vorne an?
-
Schreib doch einfach in OnOK() vor ShellExecute(...);
cf.Close();
-
nein, ich wollte nur das ihr einen koplett übersicht habt.
erklär mir bitte "close", hab im MSDN nachgeguckt aber nicht´s gefunden was mir so auf dei schnelle weiter hilft.
-
Was gibt es da zu erklären.
Wenn man eine Datei öffnet muss sie auch wieder geschlossen werden da Windows den Zugriff sperrt (Je nach Parametern bei open)CFile member close
Beschreibung solltest du in der MSDN finden.
-
Ist doch eigentlich ganz einfach:
Mit Open meldest Du beim Betriebssystem an, daß auf Du die Datei "Dev.bat" zugreifen möchtest und mit Close sagst Du daß Du die Operation abgeschlossen hast.
-
dank euch. funktioniert jetzt alles wie gewollt.
hab cf.close(); vor ::ShellExecute aufgerufen.aber, warum funktioniert es mit dem abbrechbutton ohne das ich die datei schließe???
-
Ließ dazu bitte mal mein erstes Posting !
-
sorry, was soll das für eine antwort sein??? Antwortest du immer mit fragen???
zitat:
Da stellt sich mal wieder die Frage wie lange eine Locale Variable oder Klasseninstanz gültig ist und ob CFile im Destructor close aufruft.
-
OH MANO.
Wenn du eine Locale Instanz von CFile erstellst ist diese nach dem verlassen der Funktion nicht mehr existent.
Im Destuctor von CFile wir das File automatisch geschlossen.Das es nun geschlossen ist kannst du mit einer neuen Funktion wieder auf das File zugreifen.
Ein paar Grundlagen würde ich dir schon empfehlen zum wissen.
-
dank dir, wieder was gelernt.
sorry, das ich noch nicht der "c-gott" bin wie du, aber des wegen komme ich doch hier ins forum. ich weiß wenn ich hier poste bekommme ich schnelle und verständliche hilfe.
-
Ich bin nicht der c-Gott!
Bevor man aber komplexe Sachen macht sollte man sich vorher die Grundlagen ansehen.
Dies sind nicht komplexe oder erweiterte Grundlagen sondern unbedingt notwendige.
Wie z.B wie definiere ich eine Klasse in einer Headerdatei.
Dies ist auch nichts gegen dich persönlich sondern ein Ratschlag.
-
ich denke schon das ich die grundlagen von c++ kenne, wußte nur nicht das eine locale instanz einer klasse beim verlassen der funktion gelöscht werden.
so denke wir sollten das thema an der stelle beenden.
dank noch ma.
-
ich denke schon das ich die grundlagen von c++ kenne
char szData[255]; strcpy((char*)szData, m_pfad); try { cf.SeekToBegin(); cf.Write( szData, strlen( szData ) ); }Sorry, wenn wir dich aufgrund des obigen Codes zu den absoluten Anfängern zählen, aber wer sonst würde den Inhalt einer 1l-Flasche in einen Messbecher schütten, um rauszufinden, wieviel in die Flasche passt?
-
ich kann dir leider nicht folgen:
char szData[255]; //große von szData festlegen
strcpy((char*)szData, m_pfad); //CString m_pfad nach szData kopieren
try //szData in die .bat schreiben
{
cf.SeekToBegin();
cf.Write( szData, strlen( szData ) );
}