|
FindFirstFile/FindNextFile do not guarantee any order
(probably the NT partition got defragged or sth like that lately, or maybe it's an "added goodie".)
So to play nice, you need to sort the stuff on your own.
So many people long for eternity that don't know what to do on a rainy sunday afternoon. [sighist] | [Agile Programming] [doxygen] If you look for evil in me you will find it whether it's there or not.
|
|
|
|
|
Sorta depends on what you mean by alphabetically.
For files which have numbers in their names and such,
I think that a lexical ordering is not usually
appropriate. I use a different comparator than std::less
for these kinds of things. (see below)
So if you want to process things in a more natural
order, use a collection class with a more
appropriate comparator.
struct MyLessC:binary_function<const char*,const char*,bool> {
bool operator()(const char* a,const char* b) const {
for (;; ) {
if (*a>='0'&&*a<='9') {
int _a=atoi(a);
while(*a>='0'&&*a<='9')
++a;
if (*b>='0'&&*b<='9') {
int _b=atoi(b);
while(*b>='0'&&*b<='9')
++b;
if (_a!=_b)
return _a<_b;
} else {
return *b>'9';
}
} else if (*b>='0'&&*b<='9') {
int _b=atoi(b);
while(*b>='0'&&*b<='9')
++b;
return *a<'0';
} else {
if (*a!=*b)
return *a<*b;
else if (*a)
++a,++b;
else
return false;
}
}
return false;
}
};
|
|
|
|
|
groover4life wrote:
I'm traversing through a directory extracting information from files in it. I've noticed that the filelist seems to be sorted by name on windows NT, but is sorted by some other method on Windows 2000.
I think you are dreaming this up - or more likely, you're mixing up FAT and NTFS.
NTFS is always kept in alphabetic order. That's an inherent property of it.
FAT is more like "thorow it in wherever there is space".
Btw, even if it's 5.0 (aka Windows 2000) or 5.1 (aka eXtreme Perversion), it's still Nice Try.
|
|
|
|
|
void COperDlg::OnButtonSave()
{
m_GridOper.UpdateData(true);
CTreeSet TreeSet;
TreeSet.m_strSort="indexs ASC";
if(!TreeSet.Open(CRecordset::snapshot,"tree"))
{
::AfxMessageBox("error!");
return;
}
int number=1,child;
CString str;
if((m_GridOper.GetRowCount()-1)<=num)
{
while(!TreeSet.IsEOF())
{
str.Format("%d",TreeSet.m_class);
if(m_GridOper.GetItemText(number,2)=="one")
child=1;
else
child=0;
if(m_GridOper.GetItemText(number,0)!=TreeSet.m_treename
||m_GridOper.GetItemText(number,1)!=str||m_GridOper.GetItemText(number,3)!=TreeSet.m_information
||child!=TreeSet.m_child)
{
TreeSet.Edit();
TreeSet.m_treename=m_GridOper.GetItemText(number,0);
TreeSet.m_class=atoi(str);
TreeSet.m_child=child;
TreeSet.m_information=m_GridOper.GetItemText(number,3);
TreeSet.m_indexs=number;
TreeSet.Update();
TreeSet.Requery();
}
number++;
TreeSet.MoveNext();
}
}
if((m_GridOper.GetRowCount()-1)>num)
{
while(!TreeSet.IsEOF())
{
str.Format("%d",TreeSet.m_class);
if(m_GridOper.GetItemText(number,2)=="one")
child=1;
else
child=0;
if(m_GridOper.GetItemText(number,0)!=TreeSet.m_treename
||m_GridOper.GetItemText(number,1)!=str||m_GridOper.GetItemText(number,3)!=TreeSet.m_information
||child!=TreeSet.m_child)
{
TreeSet.Edit();
TreeSet.m_treename=m_GridOper.GetItemText(number,0);
TreeSet.m_class=atoi(str);
TreeSet.m_child=child;
TreeSet.m_information=m_GridOper.GetItemText(number,3);
TreeSet.Update();
TreeSet.Requery();
}
number++;
TreeSet.MoveNext();
}
for(int i=0;i
|
|
|
|
|
Hi,
I created a small VC++ 6.0 application that creates a directory using the current time and date for the directory's name. This works fine.But then I want to copy files from another location into my directory, and CopyFile fails on me, with the error 'file not found'. Of course the file doesn't exist, since I'm trying to copy it into the newly created directory.
Any ideas?
n
|
|
|
|
|
|
hey....if file doesn't exist......how can you copy???
CopyFile() requires one file to exist to copy it to other.
C.R.Naik
|
|
|
|
|
We will have more than one EventMessageFiles and ParameterMessageFiles to get the description for some events.
I don't know how to use these files.
Please send me mail if anyone knows...
We will see the following default description if no message file is there in the registry.
"The description for Event ID ( Event ID) in Source ( Event Source ) cannot be found. The local computer may not have the necessary registry information or message DLL files to display messages from a remote computer. The following information is part of the event:"
How can I get this default description programatically..
Thanks in Advance,
Mittapalli
|
|
|
|
|
Hy, i really need help in this addin, i just dont get it!
What i want to do: an addin for the VC++ debugger, which, when i (while debugging) rightclick on a variable appears
in the context menue, and when i click my addin there, i want to calculate some things with the value of the variable. So my questions are:how do i bring my addin in the contextmenue, and how can i gain access to the value of the variable (on which i rightclicked) in the debugged code ?
any advice??
thanx a lot
andreas
|
|
|
|
|
Hi,
I'm trying to make an app which uses SDI + Splitter windows. I've successfully got the split I want, which is a full hight left pane, and the right pane being split into two panes top and bottom.
I did this by:- Initialising a Static type CSplitterWnd in my CMainFrame::OnCreateClient. The left pane gets a View, the right pane gets a CRightFrame (which i created&derived from CFrameWnd). The CRightFrame creates a top/bottom split and two views.
So far so good.
I think there is something not quite right with my window styles in the CRightFrame class. If you look at this screengrab http://draft.monster.co.uk/jon/samp.gif[^] you'll see that the right hand panes are framed with a thick line. I've fiddled with loads of different windows styles in the PreCreateWindow member of CRightFrame, but to no avail.
Can anyone point me in the right direction to get rid of these lines please?
Thanks
Jon
#include <beer.h>
|
|
|
|
|
I think the problem is, that the CFrameWnd draws a client edge and also the splitter does draws a client edge inside the views.
Perhaps removing WS_CLIENTEDGE from CFrameWnd does the job,
you could use a custom drawn splitter or change the method of creating the second splitter inside the CFrameWnd.
|
|
|
|
|
Thanks for the input. Unfortunately, it can't be that since my implementation of PreCreateWindow already removed that style:-
cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
#include <beer.h>
|
|
|
|
|
Take a look at this example.
http://www.codeproject.com/splitter/flatsplitter.asp
You can use that class or modify your own class.
Kuphryn
|
|
|
|
|
Hi,
I have a problem in casting CDBVariant string object.
CDBVariant name<br />
...
recset.GetFieldValue("Name",name);<br />
CString str = name.m_pstring;<br />
CString str = (CString&)name.m_pstring;
Thank you in advance.
|
|
|
|
|
m_pstring is of type CString * , so
CString str = *(name.m_pstring); should work fine if the pointer is ok.
rechi
|
|
|
|
|
Hi everybody
I don't understand why this morning when i tried to start my dialog based application, the message box has opened with the following message:
Uhandled exception in Fractal_v1_0.exe:0xC000005: Access Violation
So i've found that this problem comes from the following line of code in the function InitInstance:
m_pMainWnd=&Dlg;
The big problem is that my application used to run before, so is anybody could explain me where could this problem come?
Thanks in advance
gerald
|
|
|
|
|
Have you added any controls to the dialog which would cause CreateDialog to fail?
You can add "no fail create" style (in the more styles box) to your dialog and see
if any bits of it don't appear or cause your OnInitDialog / DoDataExchange functions
to die.
Good luck,
Iain.
|
|
|
|
|
For your first question i answer : yes
I'm sorry, but i'm not sure to understand exactly what you mean by adding "no fail create" style how could i do that?
|
|
|
|
|
Open the relevant dialog in VC++.
Select the dialog itself. Press return and bring up the options box.
One of the tabs at the top of the options box says "More styles".
One if the checkboxes there says "no fail create".
This sets a style flags telling windows not to fail on CreateDialog
even if it can't create a part of the dialog box.
OK?
Iain.
|
|
|
|
|
Your method works if i choose Win32 Release mode for debugging my application, but with debug mode it doesn't work anymore, why?
|
|
|
|
|
I don't know exactly why, but there is an obvious place to start. In debug mode, newly
allocated memory is filled with CC in each byte.
In Release, it is filled with 00 in each byte. So you may have a variable that you have
not explicitly initialised, but Release sets it to 0 / NULL. Maybe you've missed a
DDX_Control?
You'll need to put breakpoints in your dialogs constructor, OnInitDialog, etc and see
where it dies in more detail.
If you are really stuck, email me your project, and I'll have a look see.
Iain.
|
|
|
|
|
How i will get to know that my Windows OS is hooked by some other application? Can anyone help me for the same PLZ.
Thank you.
Vilas Shewale.
|
|
|
|
|
:-OI am developing a MFC application( SDI and style is explorer.) I want the list of all the computers (systems ) if whole network ?
I need to make a similiar applicaion like "Network Neigbourhood"
ie. how to list all the n.w
Is there any feature available in VC++ for this ???
|
|
|
|
|
I've just had a quick look, and the article
Enumeration of Computer Names and their IP address
[^]
looks like it may be what you want.
If you want to browse for a computer,
SHBrowseForFolder () with a flag of BIF_BROWSEFORCOMPUTER will
give you what you want. You can use SHGetSpecialFolderPath (CSIDL_NETWORK)
to get the PIDL of Network Neighbourhood.
Good luck,
Iain
|
|
|
|
|
I've searched the Internet and found no help on this particular subject. I need to justify my text so as both the left and right margin are aligned. I can do left align, right align and centering but unable to do justify. Can anyone please help. Thank you in advance!
|
|
|
|