leeke@m2.csc.ti.com (Steve Leeke) (07/14/89)
I would like to be able to recursively scavange a directory for a certain type of file and save the vRefNum when a file of a certain type is found. I've included to code I'm using by it seems to cause problems since the working directory is closed after I save the vRefNum, but if I leave it open I wind up with too many working directories open. Any suggestions? Thanks, Steve Leeke leeke@m2.csc.ti.com /* - */ Boolean scavengeDirectory(dirName,vRefNum,wPtr) StringPtr dirName; INT vRefNum; WindowPtr wPtr; /* - */ { OSErr err; Str255 fileName; HFileInfo dirRec; WDPBRec dirWDRec; INT index; Boolean result; result = false; dirWDRec.ioCompletion = NULL; dirWDRec.ioNamePtr = dirName; dirWDRec.ioVRefNum = vRefNum; dirWDRec.ioWDProcID = 0; dirWDRec.ioWDDirID = 0; if (PBOpenWD(&dirWDRec,false) == noErr) { index = 1; do { dirRec.ioCompletion = NULL; dirRec.ioNamePtr = fileName; dirRec.ioVRefNum = dirWDRec.ioVRefNum; dirRec.ioFDirIndex = index; dirRec.ioDirID = 0; err = PBGetCatInfo((CInfoPBPtr) &dirRec,false); if (err == noErr) { if (((dirRec.ioFlAttrib >> 4) & 0x01) != 0) { /* We have a directory. */ if (scavengeDirectory(fileName,dirWDRec.ioVRefNum,wPtr)) { result = true; break; }; } else { if (dirRec.ioFlFndrInfo.fdType == XPRCSignature) { /* Save vRefNum. */ result = true; }; }; }; index++; } while (err != fnfErr); PBCloseWD(&dirWDRec,false); }; return(result); };