|
Member 3301229 wrote: I am using CStdioFile to read the file. 99 times out of 100, it works perfectly - but randomly throws an exception. (The file exists,
and I don't know why it throws an exception; perhaps lack of a handle?)
From CException::ReportError() you can know why its failed. [if you can reproduce by running it 100 times ]
Member 3301229 wrote: 1) Would you use another way to open and read the file?
You can also use C++ file streams.
Member 3301229 wrote: 2) How would you deal with the rare exception?
If the exception is so rare, it would be difficult to find and fix it. Being in maintenance project for more that one and half years, the strategy i used to use is to add extra traces and logs. So that you can catch the exception next time.
Regards,
Jijo.
________________________________
http://weseetips.com - Visual C++ technical tips.
|
|
|
|
|
Member 3301229 wrote: and I don't know why it throws an exception; perhaps lack of a handle?)
Why are you not using CFileException[^] to determine why the failure occurs. You should modify the catch block as: catch(CFileException* e)
Member 3301229 wrote: 1) Would you use another way to open and read the file?
Not really. If it failed the first time it will probably fail the second time.
Member 3301229 wrote: 2) How would you deal with the rare exception?
I would throw or log an error so I could determine the cause for failuire.[^].
One more thing... Make sure that you limit the code in your try/catch block so that it only contains code pertaining to CStdioFile operations.
Best Wishes.
-David Delaune
|
|
|
|
|
any compiler allow this?
wchar_t *p="abc";
Just mean that when compiling in unicode mode, ansi is not considered any more.
|
|
|
|
|
followait wrote: any compiler allow this?
wchar_t *p="abc";
I think any compiler allowing the above will be out of the C++ standard.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
followait wrote: Just mean that when compiling in unicode mode, ansi is not considered any more.
What do you mean by that? Is that a question?
ANSI is considered any place you use ANSI characters in a string.
There's no "Unicode mode"...the unicode preprocessor definitions are
used to conditionally compile certain APIs and structures a certain way, but
you can freely use character arrays of any type you want, anywhere you want.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
When developing a unicode application, all string should be unicode by default, so does ANSI.
I think it makes code more clear with no drawback, doesn't it?
|
|
|
|
|
Not yet, as far as I know.
Maybe a compiler switch like "treat string literals as unicode" for default string type, similar to /J option. MS compiler team may consider your request within forthcoming release.
|
|
|
|
|
e.g i have 4 states 0 0 0 0
with 2(two one's as input) as input i.e 4C2 = 6
i want to print all states
need a unique algorithm for any number
|
|
|
|
|
|
Thanq for giving this
but can u give logic with for loops in C
|
|
|
|
|
Just look at second article I gave you. In the stdcomb folder look at files IndexCombination.h and IndexCombination.cpp.
-Saurabh
|
|
|
|
|
|
Hi,
I'm trying to determine the extent of a line of text in a rich edit control via Windows API calls.
In any other control I'd use GetTextExtentPoint32(), after sending the control a WM_GETFONT message and selecting the resulting font handle into the control's device context.
The problem is that rich edit controls don't support the WM_GETFONT message, and I haven't been able to find any other way of getting a handle to the active font.
The EM_GETCHARFORMAT message provides some details about the font, but not a font handle and not enough information to create a duplicate font handle via CreateFontIndirect().
I've been banging my head on this one for about a day now, so any help would be greatly appreciated.
Thanks,
Phil
|
|
|
|
|
The problem is, in a rich edit control, the font can change on each and every character. It's also complicated by the fact that the control supports OLE embedding, which means you could have God-knows-what embedded in the text as well. I have a feeling, unless there's an explicit message provided by the control itself (I couldn't find one on MSDN), you're out of luck.
Sorry to not be of any help.
|
|
|
|
|
Thanks anyway, that's pretty much what I've concluded after trawling through MSDN and every other source I could find.
|
|
|
|
|
hi
i have this func :
void CForm1::OnCommand1()<br />
{<br />
CComVariant retval;
<br />
CString app_path;<br />
CString Icon;<br />
<br />
app_path = Str(App.path)+CString("\\")+Str(App.EXEName)+".exe";<br />
Icon = Str(App.path)+CString("\\")+"book.ico";<br />
<br />
retval = Associate_File(".abd", app_path, "abd_ext", "My own extension", Icon);<br />
AfxMessageBox(("Associated the file extension .abd with this application!"));<br />
<br />
}
and its converted from VB code by aprogram called VBto convertor.
when i compiled it , it shows an error that
error C2065: 'App' : undeclared identifier and
error C2228: left of '.path' must have class/struct/union type
as i understand .. App is aclass in VB
so my question is
Is There any equivalent class in vc++ for the App?
and if not ...
can someone please tell me what can i do about this?any help would be appreciated .
thanks in advance.
lahom
|
|
|
|
|
There is no class in VC++ for this but you can use GetModuleBaseName and GetModuleFileName to achieve same thing.
This code snippet will give you the full path to the exe i.e. app_path.
char buffer2[2048];<br />
GetModuleFileName(NULL, buffer2, 2048);
This code snippet will give you the name of the executable path.
HANDLE hProcess = GetCurrentProcess();<br />
char buffer1[2048];<br />
DWORD r1 = GetModuleBaseName(hProcess, NULL, buffer1, 2048);
So if path of running application is C:\Windows\System32\Foo.exe. GetModuleFileName will return C:\Windows\System32\Foo.exe and GetModuleBaseName will return Foo.exe. Using these two string you can easily get path of Icon which should be C:\Windows\System32.
-Saurabh
|
|
|
|
|
I don't know anything about VBto convertor. However, I'm trying to answer.
When using MFC (seeing that CString and AfxMessageBox() were used in your code snippet), there is a class named CWinApp. You can get it by calling AfxGetApp() but none of its members provides exactly what you need although it has public data members like m_pszAppName, m_pszExeName.
You can use following functions appropriately to get fully qualified executable file name and folder name.
Like;
app_path = GetExeName();
Icon = GetExeFolder() + "\\book.ico";
CString GetExeName()
{
CString str;
DWORD dwLen = GetModuleFileName(NULL,
str.GetBufferSetLength(_MAX_PATH), _MAX_PATH);
str.ReleaseBuffer(dwLen);
return str;
}
CString GetExeFolder()
{
CString str = GetExeName();
LPTSTR psz = _tcsrchr(str.GetBuffer(1), _T('\\'));
if(NULL != psz)
*psz = _T('\0');
str.ReleaseBuffer(-1);
return str;
}
|
|
|
|
|
hi
iam sorry that it took me so long to reply to ui tried using the two functions u provided me >>>> but when i check the registry ....
i found that there is no directory specified for the extension i made "for example .ccc" .i mean there is a folder for the extension but with no directory specified for the "open " command for example.
i also tried the GetModuleFileName and GetModuleBaseName
but it also the same thing ...
no directory for the icon or the commands as well.....
what shall i do now?
thank u very much for ur help all
it was very helpful.
now iam just one step away from finishing.
this is "I HOPE" the last thing to complete the creation of the associate file type
again....THANK u all
lahom
|
|
|
|
|
Have you ever watched the return values of the functions that I provided?
As I understand, you are trying to associate an extension to your application.
There should be a string value under that extension key, named ".abd" for your example, as following.
(Default) | REG_SZ | "abd_ext" (in right pane of regedit, Name, Type, Data columns respectively)
"key" means "directory" in your terms.
In addition, there should be another key with the name "abd_ext".
Under that abd_ext key, DefaultIcon and Shell/Open/Command keys should exist.
Please, check if they exist.
If not, there should be a problem within your Associate_File() function, I think.
|
|
|
|
|
well everything u mentioned exists.
but with no directory shown in the right pane of regedit
what shown exactly for example is"for example":
(Default) | REG_SZ | u+s
as well as for the DefaultIcon and Shell/Open/Command keys ..
so i think the Associate_File() is working fine
what do u think the problem is and how to solve it...
lahom
|
|
|
|
|
The same in mine (in WinXP SP2). So, we can say that regedit doesn't show directories in the right pane.
BTW, I didn't really understand what the problem is? Could you explain more?
|
|
|
|
|
ok
the problem is that
in the application demo that i have, when pressing the button....amessage box appears saying that the file type .abd has been associated
and when naming any text file with .abd ..... it would be open in the demo program showing the content of the file in the dialog box....ok
when i tried to do it my self with another extension".ccc"
everything going good when pressing abutton saying the same thing and eveything ....but where is the difference?
it is when i try to name a text file with the extension .ccc nothing happend and icant open it "it wont see the file type"....
and also as i said before when checking and comparing the .abd AND .ccc
i found that .abd has directory for the command and the defaulticon...where for the .ccc there is not just something like"s+I" or ")]"
which is nothing exactly
i dont know what is wrong
did u get the idea?
iam really stuck in this
thanks for ur PATIENCE
|
|
|
|
|
lahom wrote: it is when i try to name a text file with the extension .ccc nothing happend and icant open it "it wont see the file type"....
Check to make sure that you successfully renamed the file extension.
(Depending on which version of Windows OS you use)
There is an option in Windows explorer settings. Under Windows Explorer's Tools menu, there is a menu command "Folder Options...", if you run it, Folder Options dialog box pops up. In view tab of this dialog, you will see "Advanced Settings:" control, find "Hide extensions of known file types" check box and clear it (remove check mark). Then, have a look the file which you wanted to rename. txt extension may still there.
Which version of Windows OS you use?
|
|
|
|
|
iam sorry ...maybe i wasnot clear enough
Ozer Karaagac wrote: lahom wrote:
it is when i try to name a text file with the extension .ccc nothing happend and icant open it "it wont see the file type"....
i didnt mean it like that .
what i menti is that when i rename "example.txt"
to "example.ccc"
the file would chang to unknown file and need to open with "open with"
which is not the case in "example.abd"
where it would open normally in the demo application specified before.
i hope i was clear this time
by the way "i use windows xp pro"
|
|
|
|