Deutsch   English   Français   Italiano  
<uu0qnk$3714j$1@i2pn2.org>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!weretis.net!feeder6.news.weretis.net!i2pn.org!i2pn2.org!.POSTED!not-for-mail
From: fir <fir@grunge.pl>
Newsgroups: comp.lang.c
Subject: Re: saving fileXXX.bmp
Date: Wed, 27 Mar 2024 11:00:19 +0100
Organization: i2pn2 (i2pn.org)
Message-ID: <uu0qnk$3714j$1@i2pn2.org>
References: <utpl9q$2u0jk$1@i2pn2.org> <utq5qj$2ummn$1@i2pn2.org> <utq6qd$jtaq$1@dont-email.me> <utrbig$30267$3@i2pn2.org> <utsfnb$18bvo$1@dont-email.me> <utu3qg$33j67$1@i2pn2.org> <utu9v8$33qfv$2@i2pn2.org> <utv1e1$28rsc$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Wed, 27 Mar 2024 10:00:21 -0000 (UTC)
Injection-Info: i2pn2.org;
	logging-data="3376275"; mail-complaints-to="usenet@i2pn2.org";
	posting-account="+ydHcGjgSeBt3Wz3WTfKefUptpAWaXduqfw5xdfsuS0";
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:27.0) Gecko/20100101 Firefox/27.0 SeaMonkey/2.24
X-Spam-Checker-Version: SpamAssassin 4.0.0
In-Reply-To: <utv1e1$28rsc$1@dont-email.me>
Bytes: 9733
Lines: 262

jak wrote:
> 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???
>>>>>> 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
>>>
>>
>>
>> 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
========== REMAINDER OF ARTICLE TRUNCATED ==========