This is more in keeping with RP's more robust extension checking:
include "ConsoleWindow"
BeginCFunction
CFStringRef CFStringCopyPathReplacingExtension( CFStringRef path,
CFStringRef oldExtension, CFStringRef newExtension ) {
CFStringRef out;
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
if ( [[[(NSString *)path pathExtension] lowercaseString]
isEqualToString:[(NSString *)oldExtension lowercaseString]] )
{
NSString *temp = [[(NSString *)path stringByDeletingPathExtension]
stringByAppendingPathExtension:(NSString *)newExtension];
out = CFStringCreateCopy( kCFAllocatorDefault, (CFStringRef)temp );
}
else
{
out = CFStringCreateCopy( kCFAllocatorDefault, path );
}
[pool drain];
return out;
}
EndC
toolbox fn CFStringCopyPathReplacingExtension( CFStringRef path,
CFStringRef oldExtension, CFStringRef newExtension ) = CFStringRef
local fn PrintCFString( string as CFStringRef )
'~'1
dim as Str255 s
if ( string == 0 ) then exit fn
fn CFStringGetPascalString( string, @s, 256, _kCFStringEncodingMacRoman )
print s
end fn
// demo main
dim as CFStringRef name
name = fn CFStringCopyPathReplacingExtension( @"file0.csv", @"csv",
@"abcd" ) // replaces
fn PrintCFString( name )
CFRelease( name )
name = fn CFStringCopyPathReplacingExtension( @"file1.CSV", @"csv",
@"abcd" ) // replaces
fn PrintCFString( name )
CFRelease( name )
name = fn CFStringCopyPathReplacingExtension( @"someDir/file2.csv",
@"csv", @"abcd" ) // replaces
fn PrintCFString( name )
CFRelease( name )
name = fn CFStringCopyPathReplacingExtension( @"file3.txt", @"csv",
@"abcd" ) // no replacement
fn PrintCFString( name )
CFRelease( name )
name = fn CFStringCopyPathReplacingExtension( @"file4", @"csv",
@"abcd" ) // no replacement
fn PrintCFString( name )
CFRelease( name )