From: Kerem Gümrükcü on
Hi Stefan,

> Even if there is such a thing, what value would it give to you? Once you
> had that "next available file/folder name" and just before you can create
> it, your program can be preempted and someone else can calculate this
> file/folder and create it, so what value will your prior call to this
> imaginary function have?. Having a function that does this as an API is
> subject to race conditions, so it is per se useless, unless tightly
> coupled with a file/foldeer creation call. The only sure thing is a
> function that tries to *create* the next possible file/folder.

Yes, you are right on that. But it is quite sure that there will be no
race condition/deadlock, because the access to the folder is only restricted
to
a special process that only runs single instance, system and sessionwide
in a special account and the folder (where the subfolders/files) will be
created) has special NTFS restrictions only for the process user context.

> You mentioned PathMakeUniqueName, I never used that, does it only
> "suggest" the file name or does it create the file as well?

AFAIK (i didnt check it and will use it!) it only suggest the file name,
like
many shell and helper functions do with strings and URLs/Paths.

> doesn't create the file name, you will have to use that in a loop until a
> combination of the result of both PathMakeUniqueName and CreateFile
> succeed.

I implemented my own version that does a for-loop on the names until it gets
a "available" name, then it does its job.

> BTW: MSDN online says that PathMakeUniqueName is suppported on W2K as
> well.

I am always very cautious on functions i never used or know, so i always
check
first whether there is a (implemented) export of the function on the named
library
and this time i was right on checking it, because my up2date W2k system does
NOT have such a export in the library! Yes, MSDN says that, but in fact it
seems to
be wrong since i do have a shell32.dll (5.00.3900.7155) on my W2k and it
does
NOT export that function at least it has no named export! But MSDN says:

Minimum DLL Version shell32.dll version 5.0 or later
Custom Implementation No
Header shlobj.h
Import library shell32.lib
Minimum operating systems Windows 2000

Thats simply wrong!

And what export name is that "PathYetAnotherMakeUniqueName", available
since >=XP *g*

Regards

K.


--
-----------------------
Beste Gr�sse / Best regards / Votre bien devoue
Kerem G�mr�kc�
Latest Project: http://www.pro-it-education.de/software/deviceremover
Latest Open-Source Projects: http://entwicklung.junetz.de
-----------------------

From: Hector Santos on
Kerem G�mr�kc� wrote:

> Hi Stefan,
>
>> Even if there is such a thing, what value would it give to you? Once
>> you had that "next available file/folder name" and just before you can
>> create it, your program can be preempted and someone else can
>> calculate this file/folder and create it, so what value will your
>> prior call to this imaginary function have?. Having a function that
>> does this as an API is subject to race conditions, so it is per se
>> useless, unless tightly coupled with a file/foldeer creation call. The
>> only sure thing is a function that tries to *create* the next possible
>> file/folder.
>
> Yes, you are right on that. But it is quite sure that there will be no
> race condition/deadlock, because the access to the folder is only
> restricted to
> a special process that only runs single instance, system and sessionwide
> in a special account and the folder (where the subfolders/files) will be
> created) has special NTFS restrictions only for the process user context.


Stefan's suggestion still applies. However, where (count) do you
begin? If its a single process/thread, you might as well use a
FindFirstFile()/FindNextFile() to get the highest count using a "New
File*.txt" specification, then +1 for the new file. If the applet is
24x7, then you can get that high count at startup.

Off hand:

int GetNextCount()
{
const char *pszSpec = "new file(*).txt";
int nHigh = 0;
WIN32_FIND_DATA fd;
HANDLE ff = FindFirstFile(pszSpec, &fd);
if (ff != INVALID_HANDLE_VALUE) {
do {
int n = atoi(fd.cFileName+9);
if (n > nHigh) nHigh = n;
} while(FindNextFile(ff,&fd));
FindClose(ff);
}
return nHigh+1;
}

Usage:

CString nfn;
nfn.Format("New File(%d)",GetNextCount())

Fine tune this to your specific paths/names. But has Stefan
highlighted, if you going to be having multiple access points,
threads, processes, etc, then doing a exclusive file open with
CreateFile() will work (after getting the highest count), then use a
loop to increment again if the file was created after the
findfirst/next search.


--
HLS
From: Alexander Grigoriev on
isn't that shlwapi.dll?

"Kerem G�mr�kc�" <kareem114(a)hotmail.com> wrote in message
news:%23wmDC32nKHA.1544(a)TK2MSFTNGP06.phx.gbl...
> Hi Stefan,
>
>> Even if there is such a thing, what value would it give to you? Once you
>> had that "next available file/folder name" and just before you can create
>> it, your program can be preempted and someone else can calculate this
>> file/folder and create it, so what value will your prior call to this
>> imaginary function have?. Having a function that does this as an API is
>> subject to race conditions, so it is per se useless, unless tightly
>> coupled with a file/foldeer creation call. The only sure thing is a
>> function that tries to *create* the next possible file/folder.
>
> Yes, you are right on that. But it is quite sure that there will be no
> race condition/deadlock, because the access to the folder is only
> restricted to
> a special process that only runs single instance, system and sessionwide
> in a special account and the folder (where the subfolders/files) will be
> created) has special NTFS restrictions only for the process user context.
>
>> You mentioned PathMakeUniqueName, I never used that, does it only
>> "suggest" the file name or does it create the file as well?
>
> AFAIK (i didnt check it and will use it!) it only suggest the file name,
> like
> many shell and helper functions do with strings and URLs/Paths.
>
>> doesn't create the file name, you will have to use that in a loop until a
>> combination of the result of both PathMakeUniqueName and CreateFile
>> succeed.
>
> I implemented my own version that does a for-loop on the names until it
> gets
> a "available" name, then it does its job.
>
>> BTW: MSDN online says that PathMakeUniqueName is suppported on W2K as
>> well.
>
> I am always very cautious on functions i never used or know, so i always
> check
> first whether there is a (implemented) export of the function on the named
> library
> and this time i was right on checking it, because my up2date W2k system
> does
> NOT have such a export in the library! Yes, MSDN says that, but in fact it
> seems to
> be wrong since i do have a shell32.dll (5.00.3900.7155) on my W2k and it
> does
> NOT export that function at least it has no named export! But MSDN says:
>
> Minimum DLL Version shell32.dll version 5.0 or later
> Custom Implementation No
> Header shlobj.h
> Import library shell32.lib
> Minimum operating systems Windows 2000
>
> Thats simply wrong!
>
> And what export name is that "PathYetAnotherMakeUniqueName", available
> since >=XP *g*
>
> Regards
>
> K.
>
>
> --
> -----------------------
> Beste Gr�sse / Best regards / Votre bien devoue
> Kerem G�mr�kc�
> Latest Project: http://www.pro-it-education.de/software/deviceremover
> Latest Open-Source Projects: http://entwicklung.junetz.de
> -----------------------


From: Kerem Gümrükcü on
Non, its shell32.dll, check exports. At first i was
expecting it in the helper library too,..

--
-----------------------
Beste Gr�sse / Best regards / Votre bien devoue
Kerem G�mr�kc�
Latest Project: http://www.pro-it-education.de/software/deviceremover
Latest Open-Source Projects: http://entwicklung.junetz.de
-----------------------

"Alexander Grigoriev" <alegr(a)earthlink.net> schrieb im Newsbeitrag
news:ueIv7V8nKHA.5552(a)TK2MSFTNGP05.phx.gbl...
> isn't that shlwapi.dll?
>
> "Kerem G�mr�kc�" <kareem114(a)hotmail.com> wrote in message
> news:%23wmDC32nKHA.1544(a)TK2MSFTNGP06.phx.gbl...
>> Hi Stefan,
>>
>>> Even if there is such a thing, what value would it give to you? Once you
>>> had that "next available file/folder name" and just before you can
>>> create it, your program can be preempted and someone else can calculate
>>> this file/folder and create it, so what value will your prior call to
>>> this imaginary function have?. Having a function that does this as an
>>> API is subject to race conditions, so it is per se useless, unless
>>> tightly coupled with a file/foldeer creation call. The only sure thing
>>> is a function that tries to *create* the next possible file/folder.
>>
>> Yes, you are right on that. But it is quite sure that there will be no
>> race condition/deadlock, because the access to the folder is only
>> restricted to
>> a special process that only runs single instance, system and sessionwide
>> in a special account and the folder (where the subfolders/files) will be
>> created) has special NTFS restrictions only for the process user context.
>>
>>> You mentioned PathMakeUniqueName, I never used that, does it only
>>> "suggest" the file name or does it create the file as well?
>>
>> AFAIK (i didnt check it and will use it!) it only suggest the file name,
>> like
>> many shell and helper functions do with strings and URLs/Paths.
>>
>>> doesn't create the file name, you will have to use that in a loop until
>>> a combination of the result of both PathMakeUniqueName and CreateFile
>>> succeed.
>>
>> I implemented my own version that does a for-loop on the names until it
>> gets
>> a "available" name, then it does its job.
>>
>>> BTW: MSDN online says that PathMakeUniqueName is suppported on W2K as
>>> well.
>>
>> I am always very cautious on functions i never used or know, so i always
>> check
>> first whether there is a (implemented) export of the function on the
>> named library
>> and this time i was right on checking it, because my up2date W2k system
>> does
>> NOT have such a export in the library! Yes, MSDN says that, but in fact
>> it seems to
>> be wrong since i do have a shell32.dll (5.00.3900.7155) on my W2k and it
>> does
>> NOT export that function at least it has no named export! But MSDN says:
>>
>> Minimum DLL Version shell32.dll version 5.0 or later
>> Custom Implementation No
>> Header shlobj.h
>> Import library shell32.lib
>> Minimum operating systems Windows 2000
>>
>> Thats simply wrong!
>>
>> And what export name is that "PathYetAnotherMakeUniqueName", available
>> since >=XP *g*
>>
>> Regards
>>
>> K.
>>
>>
>> --
>> -----------------------
>> Beste Gr�sse / Best regards / Votre bien devoue
>> Kerem G�mr�kc�
>> Latest Project: http://www.pro-it-education.de/software/deviceremover
>> Latest Open-Source Projects: http://entwicklung.junetz.de
>> -----------------------
>
>
From: Alexander Grigoriev on
I remember that shell32.dll was replaced with IE update. Maybe the function
is only present after one such update.

"Kerem G�mr�kc�" <kareem114(a)hotmail.com> wrote in message
news:errLqY$nKHA.3664(a)TK2MSFTNGP04.phx.gbl...
> Non, its shell32.dll, check exports. At first i was
> expecting it in the helper library too,..
>
> --
> -----------------------
> Beste Gr�sse / Best regards / Votre bien devoue
> Kerem G�mr�kc�
> Latest Project: http://www.pro-it-education.de/software/deviceremover
> Latest Open-Source Projects: http://entwicklung.junetz.de
> -----------------------
>
> "Alexander Grigoriev" <alegr(a)earthlink.net> schrieb im Newsbeitrag
> news:ueIv7V8nKHA.5552(a)TK2MSFTNGP05.phx.gbl...
>> isn't that shlwapi.dll?
>>
>> "Kerem G�mr�kc�" <kareem114(a)hotmail.com> wrote in message
>> news:%23wmDC32nKHA.1544(a)TK2MSFTNGP06.phx.gbl...
>>> Hi Stefan,
>>>
>>>> Even if there is such a thing, what value would it give to you? Once
>>>> you had that "next available file/folder name" and just before you can
>>>> create it, your program can be preempted and someone else can calculate
>>>> this file/folder and create it, so what value will your prior call to
>>>> this imaginary function have?. Having a function that does this as an
>>>> API is subject to race conditions, so it is per se useless, unless
>>>> tightly coupled with a file/foldeer creation call. The only sure thing
>>>> is a function that tries to *create* the next possible file/folder.
>>>
>>> Yes, you are right on that. But it is quite sure that there will be no
>>> race condition/deadlock, because the access to the folder is only
>>> restricted to
>>> a special process that only runs single instance, system and sessionwide
>>> in a special account and the folder (where the subfolders/files) will be
>>> created) has special NTFS restrictions only for the process user
>>> context.
>>>
>>>> You mentioned PathMakeUniqueName, I never used that, does it only
>>>> "suggest" the file name or does it create the file as well?
>>>
>>> AFAIK (i didnt check it and will use it!) it only suggest the file name,
>>> like
>>> many shell and helper functions do with strings and URLs/Paths.
>>>
>>>> doesn't create the file name, you will have to use that in a loop until
>>>> a combination of the result of both PathMakeUniqueName and CreateFile
>>>> succeed.
>>>
>>> I implemented my own version that does a for-loop on the names until it
>>> gets
>>> a "available" name, then it does its job.
>>>
>>>> BTW: MSDN online says that PathMakeUniqueName is suppported on W2K as
>>>> well.
>>>
>>> I am always very cautious on functions i never used or know, so i always
>>> check
>>> first whether there is a (implemented) export of the function on the
>>> named library
>>> and this time i was right on checking it, because my up2date W2k system
>>> does
>>> NOT have such a export in the library! Yes, MSDN says that, but in fact
>>> it seems to
>>> be wrong since i do have a shell32.dll (5.00.3900.7155) on my W2k and it
>>> does
>>> NOT export that function at least it has no named export! But MSDN says:
>>>
>>> Minimum DLL Version shell32.dll version 5.0 or later
>>> Custom Implementation No
>>> Header shlobj.h
>>> Import library shell32.lib
>>> Minimum operating systems Windows 2000
>>>
>>> Thats simply wrong!
>>>
>>> And what export name is that "PathYetAnotherMakeUniqueName", available
>>> since >=XP *g*
>>>
>>> Regards
>>>
>>> K.
>>>
>>>
>>> --
>>> -----------------------
>>> Beste Gr�sse / Best regards / Votre bien devoue
>>> Kerem G�mr�kc�
>>> Latest Project: http://www.pro-it-education.de/software/deviceremover
>>> Latest Open-Source Projects: http://entwicklung.junetz.de
>>> -----------------------
>>
>>