i want to save bitmap (when using editor) but i dont wannt
to pen a dialog for saving ui just wana do quicksave but not replace
the file already exist so i want to maybe use such scheme i will sawe
"painting001.bmp" and if there is such number i will just increase
the number to 002 if such exist i will use 003 and so on
do yu thing it is standable to use c std lib (and probably just
fopen fclose to detect if that file already exist of there is a need
to use some specific windows functions?
i never used it though - though maybe i could becouse code
that is able to walk on directories and read all files may be handy
for various practical usage (liek finding something , removing
duplicates etc)
fir wrote:
i want to save bitmap (when using editor) but i dont wannt
to pen a dialog for saving ui just wana do quicksave but not replace
the file already exist so i want to maybe use such scheme i will sawe
"painting001.bmp" and if there is such number i will just increase
the number to 002 if such exist i will use 003 and so on
do yu thing it is standable to use c std lib (and probably just
fopen fclose to detect if that file already exist of there is a need
to use some specific windows functions?
i never used it though - though maybe i could becouse code
that is able to walk on directories and read all files may be handy
for various practical usage (liek finding something , removing
duplicates etc)
the question is if if somoene would work longer and had 1000 bitmaps in folder if this will not slow down, or still be fast etc...could check experimentally but even then i wouldnt be sure if this is kinda optimal
or wastefull way
nul", pref);
i want to save bitmap (when using editor) but i dont wannt
to pen a dialog for saving ui just wana do quicksave but not replace
the file already exist so i want to maybe use such scheme i will sawe
"painting001.bmp" and if there is such number i will just increase
the number to 002 if such exist i will use 003 and so on
do yu thing it is standable to use c std lib (and probably just
fopen fclose to detect if that file already exist of there is a need
to use some specific windows functions?
i never used it though - though maybe i could becouse code
that is able to walk on directories and read all files may be handy
for various practical usage (liek finding something , removing duplicates etc)
On 24/03/2024 21:26, fir wrote:
fir wrote:
i want to save bitmap (when using editor) but i dont wannt
to pen a dialog for saving ui just wana do quicksave but not replace
the file already exist so i want to maybe use such scheme i will sawe
"painting001.bmp" and if there is such number i will just increase
the number to 002 if such exist i will use 003 and so on
do yu thing it is standable to use c std lib (and probably just
fopen fclose to detect if that file already exist of there is a need
to use some specific windows functions?
i never used it though - though maybe i could becouse code
that is able to walk on directories and read all files may be handy
for various practical usage (liek finding something , removing
duplicates etc)
the question is if if somoene would work longer and had 1000 bitmaps
in folder if this will not slow down, or still be fast etc...could check
experimentally but even then i wouldnt be sure if this is kinda
optimal or wastefull way
Opening a file is rather a slow operation. But not so slow on most
platforms. Of course there will come a point where the approach is
simply too slow. But for saving human-generated bitmaps I don't think
you'll test the limits.
On 24/03/2024 16:44, fir wrote:
i want to save bitmap (when using editor) but i dont wannt
to pen a dialog for saving ui just wana do quicksave but not replace
the file already exist so i want to maybe use such scheme i will sawe
"painting001.bmp" and if there is such number i will just increase
the number to 002 if such exist i will use 003 and so on
do yu thing it is standable to use c std lib (and probably just
fopen fclose to detect if that file already exist of there is a need
to use some specific windows functions?
i never used it though - though maybe i could becouse code
that is able to walk on directories and read all files may be handy
for various practical usage (liek finding something , removing
duplicates etc)
I think the bigger issue is where to create such files? If users have
used your app to open some existing .bmp file for processing, it's quite possible they won't have write access to that folder. In that case a
Save or Save As operation should trigger a standard file system file
select dialog in a GUI program which is fair enough, but it sounds like
you want to create a temp file with no user intervention? Command line utilities often have some kind of "temp folder" option.
Ideas to consider:
- tmpfile() (POSIX?]
- GetTempFileName(), GetTempPath() [Windows]
- Use environment variables like TMP/TEMP? (Possibly different usage
on different platforms)
- how to clean up such temp files so they don't pollute the file system
long term?
- ensuring uniqueness? [e.g. if multiple copies of your program are
running at the same time]
(Your idea is ok on this front, provided:
* only one process can create the temp file and
* a second open attempt with the same name will fail, and
* your logic has a loop to recognise such failures and try again
with a
new name etc..
Note GetTempFileName() fails on this front...)
- Other filename ideas : including timestamps or GUIDs or PIDs in the filename, but by
themselves those may not fully solve uniqueness problem.
- Listing the directory to generate available filenames might be more
efficient in some usage cases, especially if the API includes file
filter options.
fir ha scritto:
fir wrote:
i want to save bitmap (when using editor) but i dont wannt
to pen a dialog for saving ui just wana do quicksave but not replace
the file already exist so i want to maybe use such scheme i will sawe
"painting001.bmp" and if there is such number i will just increase
the number to 002 if such exist i will use 003 and so on
do yu thing it is standable to use c std lib (and probably just
fopen fclose to detect if that file already exist of there is a need
to use some specific windows functions?
i never used it though - though maybe i could becouse code
that is able to walk on directories and read all files may be handy
for various practical usage (liek finding something , removing
duplicates etc)
the question is if if somoene would work longer and had 1000 bitmaps
in folder if this will not slow down, or still be fast etc...could check
experimentally but even then i wouldnt be sure if this is kinda
optimal or wastefull way
In order not to manage too many differences between compilers you could
try this way:
#include <stdio.h>
#include <limits.h>
int main()
{
char pref[50] = "bmp_file_",
cmd[1024],
str[PATH_MAX];
int seq;
FILE *fp, *f;
sprintf(cmd, "c:\\windows\\system32\\cmd.exe /c dir /b /o:-n %s??? 2>nul", pref);
if((fp = popen(cmd, "rt")) != NULL)
{
if(fgets(str, PATH_MAX, fp) != NULL)
{
sscanf(str, "%[^0-9]%3d%*", pref, &seq);
sprintf(str, "%s%03d", pref, ++seq);
}
else
sprintf(str, "%s%03d", pref, 1);
pclose(fp);
if((f = fopen(str, "r")) == NULL)
{
if((f = fopen(str, "w")) == NULL)
printf("cannot create %s", str);
}
else
printf("%s already exist", str);
if(f != NULL) fclose(f);
}
else
printf("cannot open process");
return 0;
}
This piece of code is only used to give the idea and is not well tested.
Malcolm McLean wrote:
On 24/03/2024 21:26, fir wrote:
fir wrote:
i want to save bitmap (when using editor) but i dont wannt
to pen a dialog for saving ui just wana do quicksave but not replace
the file already exist so i want to maybe use such scheme i will sawe
"painting001.bmp" and if there is such number i will just increase
the number to 002 if such exist i will use 003 and so on
do yu thing it is standable to use c std lib (and probably just
fopen fclose to detect if that file already exist of there is a need
to use some specific windows functions?
i never used it though - though maybe i could becouse code
that is able to walk on directories and read all files may be handy
for various practical usage (liek finding something , removing
duplicates etc)
the question is if if somoene would work longer and had 1000 bitmaps
in folder if this will not slow down, or still be fast etc...could check >>> experimentally but even then i wouldnt be sure if this is kinda
optimal or wastefull way
Opening a file is rather a slow operation. But not so slow on most
platforms. Of course there will come a point where the approach is
simply too slow. But for saving human-generated bitmaps I don't think
you'll test the limits.
but if you open 1000th ypu need to try-open 999 which im not sure is
okay or not ...im not sure if this opening is like read a directory data
and localise this name in it or it is more heavy and also involves something heavier
for safety it rather means i should possibly read on api to read
directory files list better (which probably is also easy as i may just
google it)
but i will see yet
Mike Terry wrote:
On 24/03/2024 16:44, fir wrote:
i want to save bitmap (when using editor) but i dont wannt
to pen a dialog for saving ui just wana do quicksave but not replace
the file already exist so i want to maybe use such scheme i will sawe
"painting001.bmp" and if there is such number i will just increase
the number to 002 if such exist i will use 003 and so on
do yu thing it is standable to use c std lib (and probably just
fopen fclose to detect if that file already exist of there is a need
to use some specific windows functions?
i never used it though - though maybe i could becouse code
that is able to walk on directories and read all files may be handy
for various practical usage (liek finding something , removing
duplicates etc)
I think the bigger issue is where to create such files? If users have
used your app to open some existing .bmp file for processing, it's quite
possible they won't have write access to that folder. In that case a
Save or Save As operation should trigger a standard file system file
select dialog in a GUI program which is fair enough, but it sounds like
you want to create a temp file with no user intervention? Command line
utilities often have some kind of "temp folder" option.
Ideas to consider:
- tmpfile() (POSIX?]
- GetTempFileName(), GetTempPath() [Windows]
- Use environment variables like TMP/TEMP? (Possibly different usage
on different platforms)
- how to clean up such temp files so they don't pollute the file system
long term?
- ensuring uniqueness? [e.g. if multiple copies of your program are
running at the same time]
(Your idea is ok on this front, provided:
* only one process can create the temp file and
* a second open attempt with the same name will fail, and
* your logic has a loop to recognise such failures and try again
with a
new name etc..
Note GetTempFileName() fails on this front...)
- Other filename ideas : including timestamps or GUIDs or PIDs in the
filename, but by
themselves those may not fully solve uniqueness problem.
- Listing the directory to generate available filenames might be more
efficient in some usage cases, especially if the API includes file
filter options.
the issue is that standard windows ways to do it - like chose tool form menu then use it, save file
bny opening save dialogs - are terribly slow if someone want to do things wuick and fast - thats why
i like the
programs like irfanview or total commander for example
here i just want to save current edited image state like by pressing F5
like quicksave in doom game or something and load it by pressing say F8
or something
i would like to save in app directory which probably the application has right to write...its editor
for my use mainly if not exclusively
i want to do a lot of things by keystrokes keyholds and mouse not
by menu etc ..i know such programs are hard to learn and this the
scope of people using them gets down but in turn are quick to do things if you learn them
hovever i dropped the idea to rapidly code this (becouse other occupations) but the problem of
saving this is somewhat worth to learn
On 24/03/2024 16:44, fir wrote:
i want to save bitmap (when using editor) but i dont wannt
to pen a dialog for saving ui just wana do quicksave but not replace
the file already exist so i want to maybe use such scheme i will sawe
"painting001.bmp" and if there is such number i will just increase
the number to 002 if such exist i will use 003 and so on
On 25/03/2024 08:07, fir wrote:
Mike Terry wrote:
On 24/03/2024 16:44, fir wrote:
i want to save bitmap (when using editor) but i dont wannt
to pen a dialog for saving ui just wana do quicksave but not replace
the file already exist so i want to maybe use such scheme i will sawe
"painting001.bmp" and if there is such number i will just increase
the number to 002 if such exist i will use 003 and so on
do yu thing it is standable to use c std lib (and probably just
fopen fclose to detect if that file already exist of there is a need
to use some specific windows functions?
i never used it though - though maybe i could becouse code
that is able to walk on directories and read all files may be handy
for various practical usage (liek finding something , removing
duplicates etc)
I think the bigger issue is where to create such files? If users have
used your app to open some existing .bmp file for processing, it's quite >>> possible they won't have write access to that folder. In that case a
Save or Save As operation should trigger a standard file system file
select dialog in a GUI program which is fair enough, but it sounds like
you want to create a temp file with no user intervention? Command line
utilities often have some kind of "temp folder" option.
Ideas to consider:
- tmpfile() (POSIX?]
- GetTempFileName(), GetTempPath() [Windows]
- Use environment variables like TMP/TEMP? (Possibly different usage
on different platforms)
- how to clean up such temp files so they don't pollute the file system >>> long term?
- ensuring uniqueness? [e.g. if multiple copies of your program are
running at the same time]
(Your idea is ok on this front, provided:
* only one process can create the temp file and
* a second open attempt with the same name will fail, and
* your logic has a loop to recognise such failures and try again
with a
new name etc..
Note GetTempFileName() fails on this front...)
- Other filename ideas : including timestamps or GUIDs or PIDs in the
filename, but by
themselves those may not fully solve uniqueness problem.
- Listing the directory to generate available filenames might be more
efficient in some usage cases, especially if the API includes file
filter options.
the issue is that standard windows ways to do it - like chose tool
form menu then use it, save file bny opening save dialogs - are
terribly slow if someone want to do things wuick and fast - thats why
i like the
programs like irfanview or total commander for example
What you're describing is the standard windows way /for the user to
identify a file/ e.g. an application document that the user has created
and wants to save /somewhere they specify/.
It's not the the standard windows way to create a temporary file for application use. For that purpose I imagine the "standard" process
would be to call GetTempPath() then possibly create a subfolder for your application, and save the file there. "Standard" apps like Visual
Studio, Office etc. all create temp files without prompting the user
with a dialog box.
Mike.
jak wrote:
fir ha scritto:
fir wrote:
i want to save bitmap (when using editor) but i dont wannt
to pen a dialog for saving ui just wana do quicksave but not replace
the file already exist so i want to maybe use such scheme i will sawe
"painting001.bmp" and if there is such number i will just increase
the number to 002 if such exist i will use 003 and so on
do yu thing it is standable to use c std lib (and probably just
fopen fclose to detect if that file already exist of there is a need
to use some specific windows functions?
i never used it though - though maybe i could becouse code
that is able to walk on directories and read all files may be handy
for various practical usage (liek finding something , removing
duplicates etc)
the question is if if somoene would work longer and had 1000 bitmaps
in folder if this will not slow down, or still be fast etc...could check >>> experimentally but even then i wouldnt be sure if this is kinda
optimal or wastefull way
In order not to manage too many differences between compilers you could
try this way:
#include <stdio.h>
#include <limits.h>
int main()
{
    char pref[50] = "bmp_file_",
         cmd[1024],
         str[PATH_MAX];
    int seq;
    FILE *fp, *f;
    sprintf(cmd, "c:\\windows\\system32\\cmd.exe /c dir /b /o:-n %s??? >> 2>nul", pref);
    if((fp = popen(cmd, "rt")) != NULL)
    {
        if(fgets(str, PATH_MAX, fp) != NULL)
        {
            sscanf(str, "%[^0-9]%3d%*", pref, &seq);
            sprintf(str, "%s%03d", pref, ++seq);
        }
        else
            sprintf(str, "%s%03d", pref, 1);
        pclose(fp);
        if((f = fopen(str, "r")) == NULL)
        {
            if((f = fopen(str, "w")) == NULL)
                printf("cannot create %s", str);
        }
        else
            printf("%s already exist", str);
        if(f != NULL) fclose(f);
    }
    else
        printf("cannot open process");
    return 0;
}
This piece of code is only used to give the idea and is not well tested.
that is almost for sure bad - its liek running separate console program
to add two strings or numbers
fir ha scritto:
jak wrote:
fir ha scritto:
fir wrote:
i want to save bitmap (when using editor) but i dont wannt
to pen a dialog for saving ui just wana do quicksave but not replace >>>>> the file already exist so i want to maybe use such scheme i will sawe >>>>>
"painting001.bmp" and if there is such number i will just increase
the number to 002 if such exist i will use 003 and so on
do yu thing it is standable to use c std lib (and probably just
fopen fclose to detect if that file already exist of there is a need >>>>> to use some specific windows functions?
i never used it though - though maybe i could becouse code
that is able to walk on directories and read all files may be handy
for various practical usage (liek finding something , removing
duplicates etc)
the question is if if somoene would work longer and had 1000 bitmaps
in folder if this will not slow down, or still be fast etc...could check >>>> experimentally but even then i wouldnt be sure if this is kinda
optimal or wastefull way
In order not to manage too many differences between compilers you could
try this way:
#include <stdio.h>
#include <limits.h>
int main()
{
    char pref[50] = "bmp_file_",
         cmd[1024],
         str[PATH_MAX];
    int seq;
    FILE *fp, *f;
    sprintf(cmd, "c:\\windows\\system32\\cmd.exe /c dir /b /o:-n %s??? >>> 2>nul", pref);
    if((fp = popen(cmd, "rt")) != NULL)
    {
        if(fgets(str, PATH_MAX, fp) != NULL)
        {
            sscanf(str, "%[^0-9]%3d%*", pref, &seq);
            sprintf(str, "%s%03d", pref, ++seq);
        }
        else
            sprintf(str, "%s%03d", pref, 1);
        pclose(fp);
        if((f = fopen(str, "r")) == NULL)
        {
            if((f = fopen(str, "w")) == NULL)
                printf("cannot create %s", str);
        }
        else
            printf("%s already exist", str);
        if(f != NULL) fclose(f);
    }
    else
        printf("cannot open process");
    return 0;
}
This piece of code is only used to give the idea and is not well tested.
that is almost for sure bad - its liek running separate console program
to add two strings or numbers
I knew you would have given a similar answer but if you agree to open >thousands of files to find the last of them, then you could accept that >solution. It does not only do what you say because the system call is
looking for the file for patterns and reverses the order of the list.
All things you should do in your program. In any case, on Windows
systems there are FindFirst/FindNext functions for this type of
operations. Below is an example where I replace the system call with a >function that uses the functions given before. The convenience of the
system call is that on systems *nix works by simply replacing the call
with "/usr/bin/ls -1r .......".
#include <stdio.h>
#include <limits.h>
#include <stdbool.h>
#include <windows.h>
bool FindLastOf(char [], char *);
int main()
{
char pref[] = "bmp_file_",
f2find[50],
str[PATH_MAX];
int seq;
FILE *f;
sprintf(f2find, "%s????", pref);
if(FindLastOf(f2find, str))
{
sscanf(str, "%[^0-9]%4d%*", pref, &seq);
sprintf(str, "%s%04d", pref, ++seq);
}
else
sprintf(str, "%s%04d", pref, 1);
if((f = fopen(str, "r")) == NULL)
{
if((f = fopen(str, "w")) == NULL)
printf("cannot create %s", str);
}
else
printf("%s already exist", str);
if(f != NULL) fclose(f);
return 0;
}
bool FindLastOf(char what[], char *result)
{
WIN32_FIND_DATA fdF;
HANDLE hF= NULL;
bool ret = false;
*result = '\0';
if((hF = FindFirstFile(what, &fdF)) != INVALID_HANDLE_VALUE)
{
do
if(strcmp(fdF.cFileName, result) > 0)
strcpy(result, fdF.cFileName);
while(FindNextFile(hF, &fdF));
ret = true;
FindClose(hF);
}
return ret;
}
Not even this piece of code is well tested and is just an example.
Unfortunately, on the systems where the opendir/readir functions are >available instead of FindFirst/FindFext, the work will be more difficult >because they do not have the receipt for patterns.
Mike Terry wrote:
On 25/03/2024 08:07, fir wrote:
Mike Terry wrote:
On 24/03/2024 16:44, fir wrote:
i want to save bitmap (when using editor) but i dont wannt
to pen a dialog for saving ui just wana do quicksave but not replace >>>>> the file already exist so i want to maybe use such scheme i will sawe >>>>>
"painting001.bmp" and if there is such number i will just increase
the number to 002 if such exist i will use 003 and so on
do yu thing it is standable to use c std lib (and probably just
fopen fclose to detect if that file already exist of there is a need >>>>> to use some specific windows functions?
i never used it though - though maybe i could becouse code
that is able to walk on directories and read all files may be handy
for various practical usage (liek finding something , removing
duplicates etc)
I think the bigger issue is where to create such files? If users have >>>> used your app to open some existing .bmp file for processing, it's quite >>>> possible they won't have write access to that folder. In that case a
Save or Save As operation should trigger a standard file system file
select dialog in a GUI program which is fair enough, but it sounds like >>>> you want to create a temp file with no user intervention? Command line >>>> utilities often have some kind of "temp folder" option.
Ideas to consider:
- tmpfile() (POSIX?]
- GetTempFileName(), GetTempPath() [Windows]
- Use environment variables like TMP/TEMP? (Possibly different usage >>>> on different platforms)
- how to clean up such temp files so they don't pollute the file system >>>> long term?
- ensuring uniqueness? [e.g. if multiple copies of your program are
running at the same time]
(Your idea is ok on this front, provided:
* only one process can create the temp file and
* a second open attempt with the same name will fail, and
* your logic has a loop to recognise such failures and try again
with a
new name etc..
Note GetTempFileName() fails on this front...)
- Other filename ideas : including timestamps or GUIDs or PIDs in the >>>> filename, but by
themselves those may not fully solve uniqueness problem.
- Listing the directory to generate available filenames might be more >>>> efficient in some usage cases, especially if the API includes file >>>> filter options.
the issue is that standard windows ways to do it - like chose tool
form menu then use it, save file bny opening save dialogs - are
terribly slow if someone want to do things wuick and fast - thats why
i like the
programs like irfanview or total commander for example
What you're describing is the standard windows way /for the user to
identify a file/ e.g. an application document that the user has created
and wants to save /somewhere they specify/.
It's not the the standard windows way to create a temporary file for
application use. For that purpose I imagine the "standard" process
would be to call GetTempPath() then possibly create a subfolder for your
application, and save the file there. "Standard" apps like Visual
Studio, Office etc. all create temp files without prompting the user
with a dialog box.
Mike.
i dont want temp file so i dont fully know what you are talkin about
i just want a quicksave say you draw image and after say 30 seconds of editions you pred F5 for
quicksave and you got a history of editions in a form of many bitmaps in working directory - then
you can delect them and delete those not needed with total commander
On 25/03/2024 18:44, fir wrote:
Mike Terry wrote:
On 25/03/2024 08:07, fir wrote:
Mike Terry wrote:
On 24/03/2024 16:44, fir wrote:
i want to save bitmap (when using editor) but i dont wannt
to pen a dialog for saving ui just wana do quicksave but not replace >>>>>> the file already exist so i want to maybe use such scheme i will sawe >>>>>>
"painting001.bmp" and if there is such number i will just increase >>>>>> the number to 002 if such exist i will use 003 and so on
do yu thing it is standable to use c std lib (and probably just
fopen fclose to detect if that file already exist of there is a need >>>>>> to use some specific windows functions?
i never used it though - though maybe i could becouse code
that is able to walk on directories and read all files may be handy >>>>>> for various practical usage (liek finding something , removing
duplicates etc)
I think the bigger issue is where to create such files? If users have >>>>> used your app to open some existing .bmp file for processing, it's
quite
possible they won't have write access to that folder. In that case a >>>>> Save or Save As operation should trigger a standard file system file >>>>> select dialog in a GUI program which is fair enough, but it sounds
like
you want to create a temp file with no user intervention? Command
line
utilities often have some kind of "temp folder" option.
Ideas to consider:
- tmpfile() (POSIX?]
- GetTempFileName(), GetTempPath() [Windows]
- Use environment variables like TMP/TEMP? (Possibly different usage >>>>> on different platforms)
- how to clean up such temp files so they don't pollute the file
system
long term?
- ensuring uniqueness? [e.g. if multiple copies of your program are >>>>> running at the same time]
(Your idea is ok on this front, provided:
* only one process can create the temp file and
* a second open attempt with the same name will fail, and
* your logic has a loop to recognise such failures and try again >>>>> with a
new name etc..
Note GetTempFileName() fails on this front...)
- Other filename ideas : including timestamps or GUIDs or PIDs in the >>>>> filename, but by
themselves those may not fully solve uniqueness problem.
- Listing the directory to generate available filenames might be more >>>>> efficient in some usage cases, especially if the API includes file >>>>> filter options.
the issue is that standard windows ways to do it - like chose tool
form menu then use it, save file bny opening save dialogs - are
terribly slow if someone want to do things wuick and fast - thats why
i like the
programs like irfanview or total commander for example
What you're describing is the standard windows way /for the user to
identify a file/ e.g. an application document that the user has created
and wants to save /somewhere they specify/.
It's not the the standard windows way to create a temporary file for
application use. For that purpose I imagine the "standard" process
would be to call GetTempPath() then possibly create a subfolder for your >>> application, and save the file there. "Standard" apps like Visual
Studio, Office etc. all create temp files without prompting the user
with a dialog box.
Mike.
i dont want temp file so i dont fully know what you are talkin about
i just want a quicksave say you draw image and after say 30 seconds of
editions you pred F5 for quicksave and you got a history of editions
in a form of many bitmaps in working directory - then you can delect
them and delete those not needed with total commander
Sure... if you know where you want to save the quicksaves and you're confident the user will have access to that location, no problem. [My earlier idea of putting the date/time in the filename might still be
useful, e.g. when you come to delete the files later on with TC.]
Mike Terry wrote:
On 25/03/2024 18:44, fir wrote:
Mike Terry wrote:
On 25/03/2024 08:07, fir wrote:
Mike Terry wrote:
On 24/03/2024 16:44, fir wrote:
i want to save bitmap (when using editor) but i dont wannt
to pen a dialog for saving ui just wana do quicksave but not replace >>>>>>> the file already exist so i want to maybe use such scheme i will >>>>>>> sawe
"painting001.bmp" and if there is such number i will just increase >>>>>>> the number to 002 if such exist i will use 003 and so on
do yu thing it is standable to use c std lib (and probably just
fopen fclose to detect if that file already exist of there is a need >>>>>>> to use some specific windows functions?
i never used it though - though maybe i could becouse code
that is able to walk on directories and read all files may be handy >>>>>>> for various practical usage (liek finding something , removing
duplicates etc)
I think the bigger issue is where to create such files? If users
have
used your app to open some existing .bmp file for processing, it's >>>>>> quite
possible they won't have write access to that folder. In that case a >>>>>> Save or Save As operation should trigger a standard file system file >>>>>> select dialog in a GUI program which is fair enough, but it sounds >>>>>> like
you want to create a temp file with no user intervention? Command >>>>>> line
utilities often have some kind of "temp folder" option.
Ideas to consider:
- tmpfile() (POSIX?]
- GetTempFileName(), GetTempPath() [Windows]
- Use environment variables like TMP/TEMP? (Possibly different
usage
on different platforms)
- how to clean up such temp files so they don't pollute the file
system
long term?
- ensuring uniqueness? [e.g. if multiple copies of your program are >>>>>> running at the same time]
(Your idea is ok on this front, provided:
* only one process can create the temp file and
* a second open attempt with the same name will fail, and
* your logic has a loop to recognise such failures and try again >>>>>> with a
new name etc..
Note GetTempFileName() fails on this front...)
- Other filename ideas : including timestamps or GUIDs or PIDs in >>>>>> the
filename, but by
themselves those may not fully solve uniqueness problem.
- Listing the directory to generate available filenames might be
more
efficient in some usage cases, especially if the API includes
file
filter options.
the issue is that standard windows ways to do it - like chose tool
form menu then use it, save file bny opening save dialogs - are
terribly slow if someone want to do things wuick and fast - thats why >>>>> i like the
programs like irfanview or total commander for example
What you're describing is the standard windows way /for the user to
identify a file/ e.g. an application document that the user has created >>>> and wants to save /somewhere they specify/.
It's not the the standard windows way to create a temporary file for
application use. For that purpose I imagine the "standard" process
would be to call GetTempPath() then possibly create a subfolder for
your
application, and save the file there. "Standard" apps like Visual
Studio, Office etc. all create temp files without prompting the user
with a dialog box.
Mike.
i dont want temp file so i dont fully know what you are talkin about
i just want a quicksave say you draw image and after say 30 seconds of
editions you pred F5 for quicksave and you got a history of editions
in a form of many bitmaps in working directory - then you can delect
them and delete those not needed with total commander
Sure... if you know where you want to save the quicksaves and you're
confident the user will have access to that location, no problem. [My
earlier idea of putting the date/time in the filename might still be
useful, e.g. when you come to delete the files later on with TC.]
i though on this date too, it is easier than generating number but as i
would also want to read those files (say like holding controll and using arrows left/right) the date is then slightly worse
- though not so much as to be fullly proper i couldnt assume all
the previous piant+ numbers are present so probably full right
way to do it is to read directory files in the list sort and take the
last ... its kinda a dose of work though fortunateli i got code for such things in my library (sickle.c)
fir ha scritto:
jak wrote:
fir ha scritto:
fir wrote:
i want to save bitmap (when using editor) but i dont wannt
to pen a dialog for saving ui just wana do quicksave but not replace >>>>> the file already exist so i want to maybe use such scheme i will sawe >>>>>
"painting001.bmp" and if there is such number i will just increase
the number to 002 if such exist i will use 003 and so on
do yu thing it is standable to use c std lib (and probably just
fopen fclose to detect if that file already exist of there is a need >>>>> to use some specific windows functions?
i never used it though - though maybe i could becouse code
that is able to walk on directories and read all files may be handy
for various practical usage (liek finding something , removing
duplicates etc)
the question is if if somoene would work longer and had 1000 bitmaps
in folder if this will not slow down, or still be fast etc...could
check
experimentally but even then i wouldnt be sure if this is kinda
optimal or wastefull way
In order not to manage too many differences between compilers you could
try this way:
#include <stdio.h>
#include <limits.h>
int main()
{
char pref[50] = "bmp_file_",
cmd[1024],
str[PATH_MAX];
int seq;
FILE *fp, *f;
sprintf(cmd, "c:\\windows\\system32\\cmd.exe /c dir /b /o:-n %s???
nul", pref);
if((fp = popen(cmd, "rt")) != NULL)
{
if(fgets(str, PATH_MAX, fp) != NULL)
{
sscanf(str, "%[^0-9]%3d%*", pref, &seq);
sprintf(str, "%s%03d", pref, ++seq);
}
else
sprintf(str, "%s%03d", pref, 1);
pclose(fp);
if((f = fopen(str, "r")) == NULL)
{
if((f = fopen(str, "w")) == NULL)
printf("cannot create %s", str);
}
else
printf("%s already exist", str);
if(f != NULL) fclose(f);
}
else
printf("cannot open process");
return 0;
}
This piece of code is only used to give the idea and is not well tested.
that is almost for sure bad - its liek running separate console program
to add two strings or numbers
I knew you would have given a similar answer but if you agree to open thousands of files to find the last of them, then you could accept that solution. It does not only do what you say because the system call is
looking for the file for patterns and reverses the order of the list.
All things you should do in your program. In any case, on Windows
systems there are FindFirst/FindNext functions for this type of
operations. Below is an example where I replace the system call with a function that uses the functions given before. The convenience of the
system call is that on systems *nix works by simply replacing the call
with "/usr/bin/ls -1r .......".
#include <stdio.h>
#include <limits.h>
#include <stdbool.h>
#include <windows.h>
bool FindLastOf(char [], char *);
int main()
{
char pref[] = "bmp_file_",
f2find[50],
str[PATH_MAX];
int seq;
FILE *f;
sprintf(f2find, "%s????", pref);
if(FindLastOf(f2find, str))
{
sscanf(str, "%[^0-9]%4d%*", pref, &seq);
sprintf(str, "%s%04d", pref, ++seq);
}
else
sprintf(str, "%s%04d", pref, 1);
if((f = fopen(str, "r")) == NULL)
{
if((f = fopen(str, "w")) == NULL)
printf("cannot create %s", str);
}
else
printf("%s already exist", str);
if(f != NULL) fclose(f);
return 0;
}
bool FindLastOf(char what[], char *result)
{
WIN32_FIND_DATA fdF;
HANDLE hF= NULL;
bool ret = false;
*result = '\0';
if((hF = FindFirstFile(what, &fdF)) != INVALID_HANDLE_VALUE)
{
do
if(strcmp(fdF.cFileName, result) > 0)
strcpy(result, fdF.cFileName);
while(FindNextFile(hF, &fdF));
ret = true;
FindClose(hF);
}
return ret;
}
Not even this piece of code is well tested and is just an example.
Unfortunately, on the systems where the opendir/readir functions are available instead of FindFirst/FindFext, the work will be more difficult because they do not have the receipt for patterns.
see the code for list (by design i invented working on sickle.c -
those name convention for this list is not yet quite clear as i
generally variables and arrays wrote lettercase but here this
list im not so sure so i used pascals
void StrCopyMaxNBytes(char* dest, char* src, int n)
{
for(int i=0; i<n; i++) { dest[i]=src[i]; if(!src[i]) break; }
}
//list
const int FileNameListEntry_name_max = 500;
struct FileNameListEntry { char name[FileNameListEntry_name_max]; };
FileNameListEntry* FileNameList = NULL;
int FileNameList_Size = 0;
void FileNameList_AddOne(char* name)
{
FileNameList_Size++;
FileNameList = (FileNameListEntry*) realloc(FileNameList, FileNameList_Size * sizeof(FileNameListEntry) );
StrCopyMaxNBytes((char*)&FileNameList[FileNameList_Size-1].name,
name, FileNameListEntry_name_max);
return ;
}
jak wrote:
fir ha scritto:
jak wrote:
fir ha scritto:
fir wrote:
i want to save bitmap (when using editor) but i dont wannt
to pen a dialog for saving ui just wana do quicksave but not replace >>>>>> the file already exist so i want to maybe use such scheme i will sawe >>>>>>
"painting001.bmp" and if there is such number i will just increase >>>>>> the number to 002 if such exist i will use 003 and so on
do yu thing it is standable to use c std lib (and probably just
fopen fclose to detect if that file already exist of there is a need >>>>>> to use some specific windows functions?
i never used it though - though maybe i could becouse code
that is able to walk on directories and read all files may be handy >>>>>> for various practical usage (liek finding something , removing
duplicates etc)
the question is if if somoene would work longer and had 1000 bitmaps >>>>> in folder if this will not slow down, or still be fast etc...could
check
experimentally but even then i wouldnt be sure if this is kinda
optimal or wastefull way
In order not to manage too many differences between compilers you could >>>> try this way:
#include <stdio.h>
#include <limits.h>
int main()
{
char pref[50] = "bmp_file_",
cmd[1024],
str[PATH_MAX];
int seq;
FILE *fp, *f;
sprintf(cmd, "c:\\windows\\system32\\cmd.exe /c dir /b /o:-n %s??? >>>> 2>nul", pref);
if((fp = popen(cmd, "rt")) != NULL)
{
if(fgets(str, PATH_MAX, fp) != NULL)
{
sscanf(str, "%[^0-9]%3d%*", pref, &seq);
sprintf(str, "%s%03d", pref, ++seq);
}
else
sprintf(str, "%s%03d", pref, 1);
pclose(fp);
if((f = fopen(str, "r")) == NULL)
{
if((f = fopen(str, "w")) == NULL)
printf("cannot create %s", str);
}
else
printf("%s already exist", str);
if(f != NULL) fclose(f);
}
else
printf("cannot open process");
return 0;
}
This piece of code is only used to give the idea and is not well
tested.
that is almost for sure bad - its liek running separate console program
to add two strings or numbers
I knew you would have given a similar answer but if you agree to open
thousands of files to find the last of them, then you could accept that
solution. It does not only do what you say because the system call is
looking for the file for patterns and reverses the order of the list.
All things you should do in your program. In any case, on Windows
systems there are FindFirst/FindNext functions for this type of
operations. Below is an example where I replace the system call with a
function that uses the functions given before. The convenience of the
system call is that on systems *nix works by simply replacing the call
with "/usr/bin/ls -1r .......".
#include <stdio.h>
#include <limits.h>
#include <stdbool.h>
#include <windows.h>
bool FindLastOf(char [], char *);
int main()
{
char pref[] = "bmp_file_",
f2find[50],
str[PATH_MAX];
int seq;
FILE *f;
sprintf(f2find, "%s????", pref);
if(FindLastOf(f2find, str))
{
sscanf(str, "%[^0-9]%4d%*", pref, &seq);
sprintf(str, "%s%04d", pref, ++seq);
}
else
sprintf(str, "%s%04d", pref, 1);
if((f = fopen(str, "r")) == NULL)
{
if((f = fopen(str, "w")) == NULL)
printf("cannot create %s", str);
}
else
printf("%s already exist", str);
if(f != NULL) fclose(f);
return 0;
}
bool FindLastOf(char what[], char *result)
{
WIN32_FIND_DATA fdF;
HANDLE hF= NULL;
bool ret = false;
*result = '\0';
if((hF = FindFirstFile(what, &fdF)) != INVALID_HANDLE_VALUE)
{
do
if(strcmp(fdF.cFileName, result) > 0)
strcpy(result, fdF.cFileName);
while(FindNextFile(hF, &fdF));
ret = true;
FindClose(hF);
}
return ret;
}
Not even this piece of code is well tested and is just an example.
Unfortunately, on the systems where the opendir/readir functions are
available instead of FindFirst/FindFext, the work will be more difficult
because they do not have the receipt for patterns.
im not sure what you do your style is unclear to me esp i found name FindLastOf possibly misleading - what last of it founds?
wait a bit maybe i will wrote you how i would od it i got my library
sickle.c which is able to read list of those names to container in ram
and then operate on this
see the code for list (by design i invented working on sickle.c -
those name convention for this list is not yet quite clear as i
generally variables and arrays wrote lettercase but here this
list im not so sure so i used pascals
void StrCopyMaxNBytes(char* dest, char* src, int n)
{
for(int i=0; i<n; i++) { dest[i]=src[i]; if(!src[i]) break; }
}
//list
const int FileNameListEntry_name_max = 500;
struct FileNameListEntry { char name[FileNameListEntry_name_max]; };
FileNameListEntry* FileNameList = NULL;
int FileNameList_Size = 0;
void FileNameList_AddOne(char* name)
{
FileNameList_Size++;
FileNameList = (FileNameListEntry*) realloc(FileNameList, FileNameList_Size * sizeof(FileNameListEntry) );
StrCopyMaxNBytes((char*)&FileNameList[FileNameList_Size-1].name,
name, FileNameListEntry_name_max);
return ;
}
fir wrote:
jak wrote:
fir ha scritto:
jak wrote:
fir ha scritto:
fir wrote:
i want to save bitmap (when using editor) but i dont wannt
to pen a dialog for saving ui just wana do quicksave but not replace >>>>>>> the file already exist so i want to maybe use such scheme i will >>>>>>> sawe
"painting001.bmp" and if there is such number i will just increase >>>>>>> the number to 002 if such exist i will use 003 and so on
do yu thing it is standable to use c std lib (and probably just
fopen fclose to detect if that file already exist of there is a need >>>>>>> to use some specific windows functions?
i never used it though - though maybe i could becouse code
that is able to walk on directories and read all files may be handy >>>>>>> for various practical usage (liek finding something , removing
duplicates etc)
the question is if if somoene would work longer and had 1000 bitmaps >>>>>> in folder if this will not slow down, or still be fast etc...could >>>>>> check
experimentally but even then i wouldnt be sure if this is kinda
optimal or wastefull way
In order not to manage too many differences between compilers you
could
try this way:
#include <stdio.h>
#include <limits.h>
int main()
{
    char pref[50] = "bmp_file_",
         cmd[1024],
         str[PATH_MAX];
    int seq;
    FILE *fp, *f;
    sprintf(cmd, "c:\\windows\\system32\\cmd.exe /c dir /b /o:-n >>>>> %s???
nul", pref);
    if((fp = popen(cmd, "rt")) != NULL)
    {
        if(fgets(str, PATH_MAX, fp) != NULL)
        {
            sscanf(str, "%[^0-9]%3d%*", pref, &seq);
            sprintf(str, "%s%03d", pref, ++seq);
        }
        else
            sprintf(str, "%s%03d", pref, 1);
        pclose(fp);
        if((f = fopen(str, "r")) == NULL)
        {
            if((f = fopen(str, "w")) == NULL)
                printf("cannot create %s", str);
        }
        else
            printf("%s already exist", str);
        if(f != NULL) fclose(f);
    }
    else
        printf("cannot open process");
    return 0;
}
This piece of code is only used to give the idea and is not well
tested.
that is almost for sure bad - its liek running separate console program >>>> to add two strings or numbers
I knew you would have given a similar answer but if you agree to open
thousands of files to find the last of them, then you could accept that
solution. It does not only do what you say because the system call is
looking for the file for patterns and reverses the order of the list.
All things you should do in your program. In any case, on Windows
systems there are FindFirst/FindNext functions for this type of
operations. Below is an example where I replace the system call with a
function that uses the functions given before. The convenience of the
system call is that on systems *nix works by simply replacing the call
with "/usr/bin/ls -1r .......".
#include <stdio.h>
#include <limits.h>
#include <stdbool.h>
#include <windows.h>
bool FindLastOf(char [], char *);
int main()
{
    char pref[] = "bmp_file_",
         f2find[50],
         str[PATH_MAX];
    int seq;
    FILE *f;
    sprintf(f2find, "%s????", pref);
    if(FindLastOf(f2find, str))
    {
        sscanf(str, "%[^0-9]%4d%*", pref, &seq);
        sprintf(str, "%s%04d", pref, ++seq);
    }
    else
        sprintf(str, "%s%04d", pref, 1);
    if((f = fopen(str, "r")) == NULL)
    {
        if((f = fopen(str, "w")) == NULL)
            printf("cannot create %s", str);
    }
    else
        printf("%s already exist", str);
    if(f != NULL) fclose(f);
    return 0;
}
bool FindLastOf(char what[], char *result)
{
    WIN32_FIND_DATA fdF;
    HANDLE hF= NULL;
    bool ret = false;
    *result = '\0';
    if((hF = FindFirstFile(what, &fdF)) != INVALID_HANDLE_VALUE)
    {
        do
            if(strcmp(fdF.cFileName, result) > 0)
                strcpy(result, fdF.cFileName);
        while(FindNextFile(hF, &fdF));
        ret = true;
        FindClose(hF);
    }
    return ret;
}
Not even this piece of code is well tested and is just an example.
Unfortunately, on the systems where the opendir/readir functions are
available instead of FindFirst/FindFext, the work will be more difficult >>> because they do not have the receipt for patterns.
im not sure what you do your style is unclear to me esp i found name
FindLastOf possibly misleading - what last of it founds?
wait a bit maybe i will wrote you how i would od it i got my library
sickle.c which is able to read list of those names to container in ram
and then operate on this
i see i posted it in wrong place so here it should be
see the code for list (by design i invented working on sickle.c -
those name convention for this list is not yet quite clear as i
generally variables and arrays wrote lettercase but here this
list im not so sure so i used pascals
void StrCopyMaxNBytes(char* dest, char* src, int n)
{
   for(int i=0; i<n; i++) { dest[i]=src[i]; if(!src[i]) break; }
}
  //list
  const int FileNameListEntry_name_max = 500;
  struct FileNameListEntry { char name[FileNameListEntry_name_max]; };
  FileNameListEntry* FileNameList = NULL;
  int FileNameList_Size = 0;
  void FileNameList_AddOne(char* name)
  {
      FileNameList_Size++;
      FileNameList = (FileNameListEntry*) realloc(FileNameList,
FileNameList_Size * sizeof(FileNameListEntry) );
      StrCopyMaxNBytes((char*)&FileNameList[FileNameList_Size-1].name,
name, FileNameListEntry_name_max);
      return ;
  }
ok so to the addtion of container code above this work
 WIN32_FIND_DATA ffd;
 void ReadDIrectoryFileNamesToList(char* dir)
 {
 HANDLE h = FindFirstFile(dir, &ffd);
 if(!h) ERROR_EXIT("error reading directory");
 do {
  if (!(ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
    FileNameList_AddOne(ffd.cFileName);
 }
 while (FindNextFile(h, &ffd));
 }
int main(void)
{
//Â ReadDIrectoryFileNamesToList("C:\\*");
 ReadDIrectoryFileNamesToList("*");
 for(int i=0; i< FileNameList_Size; i++)
     printf("\n %d %s", i, FileNameList[i].name );
 return 'ok';
}
so i got all teh names in list
i do not love to much those clib functions on working on strings and
memcopy etc and i rather write my own (except printf, sprintf)
fir ha scritto:
fir wrote:
jak wrote:
fir ha scritto:
jak wrote:
fir ha scritto:
fir wrote:
i want to save bitmap (when using editor) but i dont wannt
to pen a dialog for saving ui just wana do quicksave but not
replace
the file already exist so i want to maybe use such scheme i will >>>>>>>> sawe
"painting001.bmp" and if there is such number i will just increase >>>>>>>> the number to 002 if such exist i will use 003 and so on
do yu thing it is standable to use c std lib (and probably just >>>>>>>> fopen fclose to detect if that file already exist of there is a >>>>>>>> need
to use some specific windows functions?
i never used it though - though maybe i could becouse code
that is able to walk on directories and read all files may be handy >>>>>>>> for various practical usage (liek finding something , removing >>>>>>>> duplicates etc)
the question is if if somoene would work longer and had 1000 bitmaps >>>>>>> in folder if this will not slow down, or still be fast etc...could >>>>>>> check
experimentally but even then i wouldnt be sure if this is kinda
optimal or wastefull way
In order not to manage too many differences between compilers you
could
try this way:
#include <stdio.h>
#include <limits.h>
int main()
{
char pref[50] = "bmp_file_",
cmd[1024],
str[PATH_MAX];
int seq;
FILE *fp, *f;
sprintf(cmd, "c:\\windows\\system32\\cmd.exe /c dir /b /o:-n
%s???
nul", pref);
if((fp = popen(cmd, "rt")) != NULL)
{
if(fgets(str, PATH_MAX, fp) != NULL)
{
sscanf(str, "%[^0-9]%3d%*", pref, &seq);
sprintf(str, "%s%03d", pref, ++seq);
}
else
sprintf(str, "%s%03d", pref, 1);
pclose(fp);
if((f = fopen(str, "r")) == NULL)
{
if((f = fopen(str, "w")) == NULL)
printf("cannot create %s", str);
}
else
printf("%s already exist", str);
if(f != NULL) fclose(f);
}
else
printf("cannot open process");
return 0;
}
This piece of code is only used to give the idea and is not well
tested.
that is almost for sure bad - its liek running separate console
program
to add two strings or numbers
I knew you would have given a similar answer but if you agree to open
thousands of files to find the last of them, then you could accept that >>>> solution. It does not only do what you say because the system call is
looking for the file for patterns and reverses the order of the list.
All things you should do in your program. In any case, on Windows
systems there are FindFirst/FindNext functions for this type of
operations. Below is an example where I replace the system call with a >>>> function that uses the functions given before. The convenience of the
system call is that on systems *nix works by simply replacing the call >>>> with "/usr/bin/ls -1r .......".
#include <stdio.h>
#include <limits.h>
#include <stdbool.h>
#include <windows.h>
bool FindLastOf(char [], char *);
int main()
{
char pref[] = "bmp_file_",
f2find[50],
str[PATH_MAX];
int seq;
FILE *f;
sprintf(f2find, "%s????", pref);
if(FindLastOf(f2find, str))
{
sscanf(str, "%[^0-9]%4d%*", pref, &seq);
sprintf(str, "%s%04d", pref, ++seq);
}
else
sprintf(str, "%s%04d", pref, 1);
if((f = fopen(str, "r")) == NULL)
{
if((f = fopen(str, "w")) == NULL)
printf("cannot create %s", str);
}
else
printf("%s already exist", str);
if(f != NULL) fclose(f);
return 0;
}
bool FindLastOf(char what[], char *result)
{
WIN32_FIND_DATA fdF;
HANDLE hF= NULL;
bool ret = false;
*result = '\0';
if((hF = FindFirstFile(what, &fdF)) != INVALID_HANDLE_VALUE)
{
do
if(strcmp(fdF.cFileName, result) > 0)
strcpy(result, fdF.cFileName);
while(FindNextFile(hF, &fdF));
ret = true;
FindClose(hF);
}
return ret;
}
Not even this piece of code is well tested and is just an example.
Unfortunately, on the systems where the opendir/readir functions are
available instead of FindFirst/FindFext, the work will be more
difficult
because they do not have the receipt for patterns.
im not sure what you do your style is unclear to me esp i found name
FindLastOf possibly misleading - what last of it founds?
wait a bit maybe i will wrote you how i would od it i got my library
sickle.c which is able to read list of those names to container in ram
and then operate on this
i see i posted it in wrong place so here it should be
see the code for list (by design i invented working on sickle.c -
those name convention for this list is not yet quite clear as i
generally variables and arrays wrote lettercase but here this
list im not so sure so i used pascals
void StrCopyMaxNBytes(char* dest, char* src, int n)
{
for(int i=0; i<n; i++) { dest[i]=src[i]; if(!src[i]) break; }
}
//list
const int FileNameListEntry_name_max = 500;
struct FileNameListEntry { char name[FileNameListEntry_name_max]; };
FileNameListEntry* FileNameList = NULL;
int FileNameList_Size = 0;
void FileNameList_AddOne(char* name)
{
FileNameList_Size++;
FileNameList = (FileNameListEntry*) realloc(FileNameList,
FileNameList_Size * sizeof(FileNameListEntry) );
StrCopyMaxNBytes((char*)&FileNameList[FileNameList_Size-1].name,
name, FileNameListEntry_name_max);
return ;
}
ok so to the addtion of container code above this work
WIN32_FIND_DATA ffd;
void ReadDIrectoryFileNamesToList(char* dir)
{
HANDLE h = FindFirstFile(dir, &ffd);
if(!h) ERROR_EXIT("error reading directory");
do {
if (!(ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
FileNameList_AddOne(ffd.cFileName);
}
while (FindNextFile(h, &ffd));
}
int main(void)
{
// ReadDIrectoryFileNamesToList("C:\\*");
ReadDIrectoryFileNamesToList("*");
for(int i=0; i< FileNameList_Size; i++)
printf("\n %d %s", i, FileNameList[i].name );
return 'ok';
}
so i got all teh names in list
ok. Your code creates a list with all the file names. If I run mine,
however, it looks for the alphabetically greater file with
"bmp_File_????" search-pattern, acquires the Counter from the name and increases it to give the name to the next file, then creates it. So if
you run the program in an empty directory the first time it will create
a file called "bmp_file_0001" and every time you run the file in the
same directory it will create a new file with the counter increased.
bmp_File_0001
bmp_File_0002
bmp_File_0003
bmp_File_0004
bmp_File_0005
and so on...
fir ha scritto:
i do not love to much those clib functions on working on strings and
memcopy etc and i rather write my own (except printf, sprintf)
I don't like those functions too. I only use them for attempts and
examples to reduce code lines.
On 25/03/2024 18:44, fir wrote:
Mike Terry wrote:
On 25/03/2024 08:07, fir wrote:
Mike Terry wrote:
On 24/03/2024 16:44, fir wrote:
i want to save bitmap (when using editor) but i dont wannt
to pen a dialog for saving ui just wana do quicksave but not replace >>>>>> the file already exist so i want to maybe use such scheme i will sawe >>>>>>
"painting001.bmp" and if there is such number i will just increase >>>>>> the number to 002 if such exist i will use 003 and so on
do yu thing it is standable to use c std lib (and probably just
fopen fclose to detect if that file already exist of there is a need >>>>>> to use some specific windows functions?
i never used it though - though maybe i could becouse code
that is able to walk on directories and read all files may be handy >>>>>> for various practical usage (liek finding something , removing
duplicates etc)
I think the bigger issue is where to create such files? If users have >>>>> used your app to open some existing .bmp file for processing, it's
quite
possible they won't have write access to that folder. In that case a >>>>> Save or Save As operation should trigger a standard file system file >>>>> select dialog in a GUI program which is fair enough, but it sounds
like
you want to create a temp file with no user intervention? Command
line
utilities often have some kind of "temp folder" option.
Ideas to consider:
- tmpfile() (POSIX?]
- GetTempFileName(), GetTempPath() [Windows]
- Use environment variables like TMP/TEMP? (Possibly different usage >>>>> on different platforms)
- how to clean up such temp files so they don't pollute the file
system
long term?
- ensuring uniqueness? [e.g. if multiple copies of your program are >>>>> running at the same time]
(Your idea is ok on this front, provided:
* only one process can create the temp file and
* a second open attempt with the same name will fail, and
* your logic has a loop to recognise such failures and try again >>>>> with a
new name etc..
Note GetTempFileName() fails on this front...)
- Other filename ideas : including timestamps or GUIDs or PIDs in the >>>>> filename, but by
themselves those may not fully solve uniqueness problem.
- Listing the directory to generate available filenames might be more >>>>> efficient in some usage cases, especially if the API includes file >>>>> filter options.
the issue is that standard windows ways to do it - like chose tool
form menu then use it, save file bny opening save dialogs - are
terribly slow if someone want to do things wuick and fast - thats why
i like the
programs like irfanview or total commander for example
What you're describing is the standard windows way /for the user to
identify a file/ e.g. an application document that the user has created
and wants to save /somewhere they specify/.
It's not the the standard windows way to create a temporary file for
application use. For that purpose I imagine the "standard" process
would be to call GetTempPath() then possibly create a subfolder for your >>> application, and save the file there. "Standard" apps like Visual
Studio, Office etc. all create temp files without prompting the user
with a dialog box.
Mike.
i dont want temp file so i dont fully know what you are talkin about
i just want a quicksave say you draw image and after say 30 seconds of
editions you pred F5 for quicksave and you got a history of editions
in a form of many bitmaps in working directory - then you can delect
them and delete those not needed with total commander
Sure... if you know where you want to save the quicksaves and you're confident the user will have access to that location, no problem. [My earlier idea of putting the date/time in the filename might still be
useful, e.g. when you come to delete the files later on with TC.]
Mike.
jak wrote:
fir ha scritto:still you could write names in pascal i guess thet describe what they do becouse honsetly seing them i dont know immediatelly what they do as
i do not love to much those clib functions on working on strings and
memcopy etc and i rather write my own (except printf, sprintf)
I don't like those functions too. I only use them for attempts and
examples to reduce code lines.
i dont know them all (as i not use them or rarely)
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 299 |
Nodes: | 16 (2 / 14) |
Uptime: | 51:09:12 |
Calls: | 6,689 |
Calls today: | 7 |
Files: | 12,225 |
Messages: | 5,344,600 |
Posted today: | 1 |