2012年2月20日月曜日

Cocoaでファイル名変更

ファイル名を変更するAPIとしてNSFileManagerにmoveItemAtPath:toPath:error:が用意されていますが、元のファイル名と大文字小文字が違うだけのファイル名には変更できないようです(Mac OS X 10.6.6で確認)。例えば、TEST.txtをtest.txtに変更する場合などです。これを回避するためには、下記のようにrenameシステムコールを使うと良さそうです。


manager = [NSFileManager defaultManager];
if([manager fileExistsAtPath:newPath] == NO || 
    [path caseInsensitiveCompare:newPath] == NSOrderedSame) {
  rename([path fileSystemRepresentation], [newPath fileSystemRepresentation]);
}


renameシステムコールは第2引数に指定したファイルが既に存在する場合はそれを消してしまうので、あらかじめファイル名変更後のファイルが存在するかどうかを確認して、ファイルが存在しないか、元のファイル名と新しいファイル名が大文字小文字が違うだけの場合のみ名前を変更するようにします。

0 件のコメント:

コメントを投稿