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 ==========