This is exactly what I need. thanks Robert Steve On Aug 7, 2011, at 2:54 AM, Robert Purves wrote: > > Steve wrote: > >> When my app is used in a multiuser environment, I want to place an alias of the shared database folder on the server and resolve the FSRef for that folder to use for my data files. >> By default, it looks in Users>Shared for a specific folder by name and if it exists, uses that folder. If it doesn't it will prompt to locate the folder to use. >> How can I modify and use the example Alias Demo in the FB 5 Examples>Files folder to resolve an FSRef for a aliased folder vs. a file? > > The first time you run the demo below it prompts a folder choice and saves an alias of the chosen folder, in /Users/Shared/Steve's Data Folder Locator. Subsequent runs do not prompt. That must be close to your requirements. > > Robert P. > > > '------------- > include "Util_FileDirectory.incl" > include "Tlbx Aliases.incl" > > > _aliasFileName$ = "Steve's Data Folder Locator" > > > local fn GetAliasFileParentRef( outRef as ^FSRef ) as OSStatus > '~'1 > // /Users/Shared > end fn = fn FD_SpecialDirectoryGetFSRef( _kOnAppropriateDisk, _kSharedUserDataFolderType, #outRef ) > > > local fn RetrieveLocationFromAliasFile( outRef as ^FSRef ) as OSStatus > '~'1 > dim as FSRef parentRef, aliasRef > dim as Boolean wasChanged > dim as AliasHandle aliasH > dim as UInt32 fileSize > dim as OSStatus err > > // Find the alias file's parent folder. > err = fn GetAliasFileParentRef( @parentRef ) > if ( err ) then exit fn > // Find the alias file. > err = fn FD_PathGetFSRef( fn CFSTR( _aliasFileName$ ), @parentRef, @aliasRef ) > if ( err ) then exit fn > // The alias file exists. Attempt to open it. > on error end : error = _noErr > open "I", 111, @aliasRef > err = error : error = _noErr > if ( err ) then exit fn > // Read file contents into a handle. > fileSize = lof( 111, 1 ) > aliasH = fn NewHandle( fileSize ) > read file #111, [aliasH], fileSize > // Resolve the file object to a FSRef. > err = fn FSResolveAlias( 0, aliasH, #outRef, @wasChanged ) > DisposeHandle( (Handle)aliasH ) > end fn = err > > > local fn StashLocationAsAliasFile( dataFolderRef as ^FSRef ) as OSStatus > '~'1 > dim as FSRef parentRef > dim as Handle h > dim as OSStatus err > > // Find the alias file's parent folder. > err = fn GetAliasFileParentRef( @parentRef ) > if ( err ) then exit fn > err = fn FSNewAlias( 0, #dataFolderRef, @h ) > if ( err ) then exit fn > // Attempt to open the alias file, erasing preexisting file contents. > def open "alisMACS" > on error end : error = _noErr > open "O", 111, _aliasFileName$, @parentRef > err = error : error = _noErr > long if ( err == _noErr ) > // Write alias data to file. > write file #111, [h], fn GetHandleSize( h ) > close 111 > end if > DisposeHandle( h ) > end fn = err > > > > include "ConsoleWindow" > > dim as OSStatus err > dim as FSRef ref > > err = fn RetrieveLocationFromAliasFile( @ref ) > long if ( err ) > long if ( files$( _FSRefFolder, "Locate Steve's Data folder", "", @ref ) ) > err = fn StashLocationAsAliasFile( @ref ) > long if ( err ) > print "Could not save location" > xelse > print "Location saved OK" > end if > end if > xelse > print "Location found and resolved" > end if > '------------- > > > > > > -- > To unsubscribe, send ANY message to: futurebasic-unsubscribe@... > To access the list archives, go to: http://freegroups.net/groups/futurebasic/ >