Jan 96 Tips
Volume Number: | | 12
|
Issue Number: | | 1
|
Column Tag: | | Tips & Tidbits
|
Tips & Tidbits
By Steve Sisak, Contributing Editor
Note: Source code files accompanying article are located on MacTech CD-ROM or source code disks.
Here is a handy function for making sure that an undeletable file from hell doesnt get in the way during program execution, just move it to the Trash. This only works when the file is on the same volume as the Trash, however.
Greg Poole
File: FSpTrashFile.h
/******************************************************************************
FSpTrashFile.h
history:
modified: xx/xx/xx who are you? what did you do?
created: 11/23/94 greg poole
Greg Poole
Vital Images, Inc.
email: greg@vitalimages.com
******************************************************************************/
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
extern OSErr FSpTrashFile( FSSpecPtr file );
#ifdef __cplusplus
}
#endif
File: FSpTrashFile.c
/******************************************************************************
Move a file to the trash if it is not possible to delete it.
Can only move file to the trash if it is on the same volume
as the file to be deleted.
******************************************************************************/
#include <Folders.h>
#include "FSpTrashFile.h"
OSErr FSpTrashFile( FSSpecPtr theFile )
{
OSErr theErr = noErr;
short vRefNum;
long dirID;
FSSpec spec;
FSSpecPtrtheTrash = &spec;
// dont go any further if there isnt a file to deal with or if the
// file was deleted successfully
//
theErr = FSpDelete( theFile );
if ( theErr == fnfErr || theErr == noErr )
return noErr;
// if we got this far, we had a problem deleting the file,
// dont worry, relax and just trash it
theErr = FindFolder( kOnSystemDisk, kTrashFolderType,
kDontCreateFolder, &vRefNum, &dirID );
if ( theErr == noErr )
theErr = FSMakeFSSpec( vRefNum, dirID, "\p", theTrash );
if ( theErr == noErr )
if ( theFile->vRefNum != theTrash->vRefNum )
theErr = diffVolErr;
if ( theErr == noErr )
theErr = CatMove( theFile->vRefNum, theFile->parID,
theFile->name, theTrash->parID, theTrash->name );
return theErr;
} // end FSpTrashFile
// define TEST_TRASH_FILE for a standalone test
#define TEST_TRASH_FILE
#if defined( TEST_TRASH_FILE )
// local function prototypes
static void InitTheMac( void );
static Boolean GetAFile( FSSpecPtr file );
static void InitTheMac( void )
{
InitGraf( &qd.thePort );
InitFonts();
InitWindows();
InitMenus();
TEInit();
InitDialogs( 0L );
InitCursor();
MaxApplZone();
} // end InitTheMac
static Boolean GetAFile( FSSpecPtr file )
{
SFTypeList types;
StandardFileReply reply;
StandardGetFile( NULL, -1, types, &reply );
if ( reply.sfGood )
BlockMove( &reply.sfFile, file, sizeof( FSSpec ) );
return reply.sfGood;
} // end GetAFile
void main( void )
{
FSSpec srcFileSpec;
OSErr theErr = noErr;
InitTheMac();
if ( GetAFile( &srcFileSpec ) )
theErr = FSpTrashFile( &srcFileSpec );
} // end main
#endif // TEST_TRASH_FILE