bool FSCopyFile(const unicode_t *srcFileName, const unicode_t *desFileName, bool bFailIfExists/* = true*/) { #if defined(_WIN32_WCE) return CopyFile(srcFileName, desFileName, bFailIfExists) == TRUE; #elif defined(WIN32) return CopyFileW(srcFileName, desFileName, bFailIfExists) == TRUE; #elif defined(__APPLE_CPP__) || defined(__APPLE_CC__) FSString srcString(srcFileName); FSString desString(desFileName); if ( srcString == desString ) return false; if ( bFailIfExists ) { if ( _ExistFile(desString.GetString()) ) return false; } return _CopyFile(srcFileName, desFileName); // return copyfile(srcString.GetString(), desString.GetString(), NULL, bFailIfExists ? COPYFILE_ALL | COPYFILE_EXCL : COPYFILE_ALL) == 0; #else FSString srcString(srcFileName); FSString desString(desFileName); if ( srcString == desString ) return false; if ( bFailIfExists ) { if ( _ExistFile(desString.GetString()) ) return false; } return copyfile(srcString.GetString(), desString.GetString(), NULL, bFailIfExists? COPYFILE_ALL | COPYFILE_EXCL : COPYFILE_ALL) == 0; #endif }
int TreeCreateTreeFiles(char *tree, int shot, int source_shot) { size_t len = strlen(tree); char tree_lower[13]; char pathname[32]; char *path; char *pathin; size_t pathlen; char name[32]; size_t i; int status = 1; int itype; char *types[] = {".tree",".characteristics",".datafile"}; for (i=0;i<len && i < 12;i++) tree_lower[i] = tolower(tree[i]); tree_lower[i]=0; strcpy(pathname,tree_lower); strcat(pathname,TREE_PATH_SUFFIX); #if defined(__VMS) pathin = strcpy(malloc(strlen(pathname)+1,pathname); #else pathin = TranslateLogical(pathname); #endif if (pathin) { pathlen = strlen(pathin); for (itype=0;itype<3 && (status & 1);itype++) { char *srcfile = 0; char *dstfile = 0; char *type = types[itype]; char *part; path = MaskReplace(pathin,tree_lower,source_shot); pathlen = strlen(path); if (source_shot > 999) sprintf(name,"%s_%d",tree_lower,source_shot); else if (source_shot > 0) sprintf(name,"%s_%03d",tree_lower,source_shot); else if (source_shot == -1) sprintf(name,"%s_model",tree_lower); else return TreeINVSHOT; for (i=0,part=path;i<pathlen+1;i++) { if (*part == ' ') part++; else if ((path[i] == ';' || path[i] == 0) && strlen(part)) { path[i] = 0; srcfile = strcpy(malloc(strlen(part)+strlen(name)+strlen(type)+2),part); if (srcfile[strlen(srcfile)-1] == '+') { srcfile[strlen(srcfile)-1] = '\0'; } else { if (strcmp(srcfile+strlen(srcfile)-1,TREE_PATH_DELIM)) strcat(srcfile,TREE_PATH_DELIM); strcat(srcfile,name); } strcat(srcfile,type); if (MDS_IO_EXISTS(srcfile)) break; else { free(srcfile); srcfile = 0; part = &path[i+1]; } } } free(path); if (srcfile) { path = MaskReplace(pathin,tree_lower,shot); pathlen = strlen(path); if (shot > 999) sprintf(name,"%s_%d",tree_lower,shot); else if (shot > 0) sprintf(name,"%s_%03d",tree_lower,shot); else if (shot == -1) sprintf(name,"%s_model",tree_lower); else return TreeINVSHOT; for (i=0,part=path;i<pathlen+1;i++) { if (*part == ' ') part++; else if ((path[i] == ';' || path[i] == 0) && strlen(part)) { path[i] = 0; dstfile = strcpy(malloc(strlen(part)+strlen(name)+strlen(type)+2),part); if (dstfile[strlen(dstfile)-1] == '+') { char *delim = TREE_PATH_DELIM; int j = (int)(strlen(dstfile) - 1); dstfile[j] = '\0'; for (j--;j >= 0 && dstfile[j] != delim[0]; j--); if (j >= 0) { dstfile[j] = 0; if (MDS_IO_EXISTS(dstfile)) { dstfile[j] = delim[0]; strcat(dstfile,type); break; } } } else { if (strcmp(dstfile+strlen(dstfile)-1,TREE_PATH_DELIM) == 0) *(dstfile+strlen(dstfile)-1) = 0; if (MDS_IO_EXISTS(dstfile)) { strcat(dstfile,TREE_PATH_DELIM); strcat(dstfile,name); strcat(dstfile,type); break; } } free(dstfile); dstfile = 0; part = &path[i+1]; } } free(path); if (dstfile) { status = _CopyFile(srcfile,dstfile,itype != 0); free(dstfile); } else status = TreeINVPATH; free(srcfile); } else status = TreeTREENF; } TranslateLogicalFree(pathin); } else status = TreeINVPATH; return status; }