On 9 Sep., 19:43, Andreas Höschler <[EMAIL PROTECTED]> wrote: > Dear all, > > I would like to programmatically copy files with > > system([[NSString stringWithFormat:@"cp -r %@ %@", sourcePath, > destPath] cString]); > > or alternatively using NSFileManager. This works as long as sourcePath > does not contain special characters like ä,ö,ü,... > > In a terminal shell I can successfully copy such a file by typing > > cp "Germ > > and then using TAB to automatically complete the path to > > cp "German Fa\314\210hrhaus.jpeg" /home/ahoesch/A00 > > The question for me now is where this magic \314\210 stuff comes from > and how I can do the conversion in my GNUstep app programmatically > before building the copy command. > > system([[NSString stringWithFormat:@"cp -r %@ %@", [sourcePath > magicMethod], destPath] cString]); > > Hints are greatly appreciated! > > Thanks, > > Andreas
Use system([[NSString stringWithFormat:@"cp -r '%s' '%s'", [sourcePath fileSystemRepresentation], [destPath fileSystemRepresentation]] cString]); This is NOT safe for file names that include quotes. Please note the fileSystemRepresentation method. Unfortunately, this appears not to be well known and most Obj-C programmers assume that cString always returns a valid file name... A different solution (which is not fileSystemRepresentation safe!): NSTask allows to set the parameters individually, i.e. task=[[NSTask alloc] init]; [task setPath:@"/bin/cp"]; [task setArguments:[NSArray arrayWithObjects:@"cp", @"-r", sourcePath, destPath]]; [task launch]; -- hns _______________________________________________ Discuss-gnustep mailing list [email protected] http://lists.gnu.org/mailman/listinfo/discuss-gnustep
