Deutsch English Français Italiano |
<utu3qg$33j67$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: Tue, 26 Mar 2024 10:17:12 +0100 Organization: i2pn2 (i2pn.org) Message-ID: <utu3qg$33j67$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> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Tue, 26 Mar 2024 09:17:06 -0000 (UTC) Injection-Info: i2pn2.org; logging-data="3263687"; 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 In-Reply-To: <utsfnb$18bvo$1@dont-email.me> X-Spam-Checker-Version: SpamAssassin 4.0.0 Bytes: 6132 Lines: 160 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