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

Reply via email to