WinExec("Notepad.exe " +fileName,SW_SHOW doesn't work )
-
fileName is the name of the file I just created some lines above the WinExec Command. I have an Object f of CStdioFile type, I open it in creation mode, I write in it with f.WriteString and then close it. I want to launch a Notepad to preview its content, Notepad starts but the content of file is not displayed, if I click on File>Open>file name, it works and content is displayed . Format of WinExec and content of fileName are correct because using the same instruction a the beginning of my routine (before open/write/close), I can start a notepad displaying the file previously created. It is just like the file is not yet available for notepad even if a close is done ...!? Any help is welcome DD
-
fileName is the name of the file I just created some lines above the WinExec Command. I have an Object f of CStdioFile type, I open it in creation mode, I write in it with f.WriteString and then close it. I want to launch a Notepad to preview its content, Notepad starts but the content of file is not displayed, if I click on File>Open>file name, it works and content is displayed . Format of WinExec and content of fileName are correct because using the same instruction a the beginning of my routine (before open/write/close), I can start a notepad displaying the file previously created. It is just like the file is not yet available for notepad even if a close is done ...!? Any help is welcome DD
Couldn't you open the file with nOpenFlags = CFile::shareDenyNone so that other apps have access to your file even when you have it open within your app? Adam. "I spent a lot of my money on booze, birds and fast cars. The rest I just squandered" George Best.
-
fileName is the name of the file I just created some lines above the WinExec Command. I have an Object f of CStdioFile type, I open it in creation mode, I write in it with f.WriteString and then close it. I want to launch a Notepad to preview its content, Notepad starts but the content of file is not displayed, if I click on File>Open>file name, it works and content is displayed . Format of WinExec and content of fileName are correct because using the same instruction a the beginning of my routine (before open/write/close), I can start a notepad displaying the file previously created. It is just like the file is not yet available for notepad even if a close is done ...!? Any help is welcome DD
-
I would like to precise that I have tried to open my file with CFile::shareDenyNone because I thought problem was coming from a conflict but result was the same ...
DD, Are you opening the file with just CFile::modeCreate? I have just put together an app to try to recreate your problem on VC6. Everything works just fine but you can't write to your file if you open in CFile::modeCreate only. It has to be CFile::modeCreate+CFile::modeWrite. e.g.
CStdioFile file; file.Open("c:\\filetest.txt", CFile::modeCreate+CFile::modeWrite+CFile::shareExclusive,NULL); file.SeekToEnd(); file.WriteString("this is written\n"); file.Close(); WinExec("c:\\WINNT\\notepad.exe c:\\FileTest.txt",SW_SHOW);
works fine and dandy.CStdioFile file; file.Open("c:\\filetest.txt",CFile::modeCreate+CFile::shareExclusive,NULL); file.SeekToEnd(); file.WriteString("this is written\n"); file.Close(); WinExec("c:\\WINNT\\notepad.exe c:\\FileTest.txt",SW_SHOW);
fails at WriteString() and never gets to WinExec. If you post the code that's causing you a prob then perhaps we could have a look? hope this helps Adam. P.S. would recommend using ShellExecuteEx rather than WinExec as you can get a handle to Notepad to see when it has terminated. "I spent a lot of my money on booze, birds and fast cars. The rest I just squandered" George Best. -
DD, Are you opening the file with just CFile::modeCreate? I have just put together an app to try to recreate your problem on VC6. Everything works just fine but you can't write to your file if you open in CFile::modeCreate only. It has to be CFile::modeCreate+CFile::modeWrite. e.g.
CStdioFile file; file.Open("c:\\filetest.txt", CFile::modeCreate+CFile::modeWrite+CFile::shareExclusive,NULL); file.SeekToEnd(); file.WriteString("this is written\n"); file.Close(); WinExec("c:\\WINNT\\notepad.exe c:\\FileTest.txt",SW_SHOW);
works fine and dandy.CStdioFile file; file.Open("c:\\filetest.txt",CFile::modeCreate+CFile::shareExclusive,NULL); file.SeekToEnd(); file.WriteString("this is written\n"); file.Close(); WinExec("c:\\WINNT\\notepad.exe c:\\FileTest.txt",SW_SHOW);
fails at WriteString() and never gets to WinExec. If you post the code that's causing you a prob then perhaps we could have a look? hope this helps Adam. P.S. would recommend using ShellExecuteEx rather than WinExec as you can get a handle to Notepad to see when it has terminated. "I spent a lot of my money on booze, birds and fast cars. The rest I just squandered" George Best.You don't need to use
CFile::SeekToEnd
When you open the file you are creting the file, id for that you are in the end of the file.... Best Regards Carlos Antollini. Sonork ID 100.10529 cantollini -
You don't need to use
CFile::SeekToEnd
When you open the file you are creting the file, id for that you are in the end of the file.... Best Regards Carlos Antollini. Sonork ID 100.10529 cantolliniCheers pal.. I was testing the code out using modeRead, modeWrite and some other combinations to see if I could recreate Qadddd's problem. I kinda left the SeekToEnd() in there by accident. Cheers anyway! :) "I spent a lot of my money on booze, birds and fast cars. The rest I just squandered" George Best.
-
Cheers pal.. I was testing the code out using modeRead, modeWrite and some other combinations to see if I could recreate Qadddd's problem. I kinda left the SeekToEnd() in there by accident. Cheers anyway! :) "I spent a lot of my money on booze, birds and fast cars. The rest I just squandered" George Best.
The code looks like this (I am at work, not at home and doesn't have my source code near me) =========================== CStdioFile f; char pFileName[] = "myfile.txt"; char buff[] = "test string"; f.Open( pFileName, CFile::modeCreate | CFile::modeWrite | CFile::shareDenyWrite | CFile::typeText); // tested with CFile::shareDenyNone instead of CFile::shareDenyWrite but it doesn't correct f.WriteString(buff); // and more writings f.Close; // supposed to close file and make it available WinExec("Notepad.exe myfile.txt",SW_SHOW) =========================== The same WinExec instruction put at the beginning of my routine works fine if I launch it a second time and the content of the file created during the 1st pass is correctly displayed ... Hope it is a little bit more clear....
-
The code looks like this (I am at work, not at home and doesn't have my source code near me) =========================== CStdioFile f; char pFileName[] = "myfile.txt"; char buff[] = "test string"; f.Open( pFileName, CFile::modeCreate | CFile::modeWrite | CFile::shareDenyWrite | CFile::typeText); // tested with CFile::shareDenyNone instead of CFile::shareDenyWrite but it doesn't correct f.WriteString(buff); // and more writings f.Close; // supposed to close file and make it available WinExec("Notepad.exe myfile.txt",SW_SHOW) =========================== The same WinExec instruction put at the beginning of my routine works fine if I launch it a second time and the content of the file created during the 1st pass is correctly displayed ... Hope it is a little bit more clear....
Hmm.. Apart from changing f.Close; to f.Close(); and setting WinExec("Notepad.exe myfile.txt",SW_SHOW) to WinExec("c:\\WINNT\\Notepad.exe myfile.txt",SW_SHOW); it all works okay. It looks like one of those annoying ones that works on one PC and not the other! :( I don't know if it is worth setting up a timer to send a WM_TIMER message and handling the message to open Notepad after about a quarter of a second or so and seeing what happens? hope this helps. Sounds very perplexing! :eek: Adam. "I spent a lot of my money on booze, birds and fast cars. The rest I just squandered" George Best.