Re: renaming directories and moving files into them (NSFileManager)
Re: renaming directories and moving files into them (NSFileManager)
- Subject: Re: renaming directories and moving files into them (NSFileManager)
- From: Andy Lee <email@hidden>
- Date: Mon, 18 Apr 2011 01:56:44 -0400
But seriously... there's more going on in your code than in mine, so the problem must lie in whatever is different (or be somehow caused by the data rather than the code). Like you say, what you're doing *seems* pretty straightforward and what you're seeing *seems* impossible (my favorite kind of bug).
Lots of questions, mainly along the lines of ruling out as much as possible:
* Did you see my previous question? It looked like your logic would result in directories xxx-APPL, xxx-APPL-APPL, xxx-APPL-APPL-APPL, etc. -- or was I mistaken? If there is code elsewhere that is resetting shootPath to not have the APPL suffix, could you be inadvertently recreating the old directory? What if you put an NSLog after every line of code that does a mkdir, to make sure directories only get created once? Are you sure it's the mp4 files you copy *after* renaming the directory that get put in the new directory?
* What if you put a breakpoint on the call to moveItemAtPath:toPath:error: and step over it? Do you see in the Finder that there is one directory before the call and two directories afterward? If so, there's your smoking gun that there's a bug in the method. If you see only one directory (with the new name), that would suggest that moveItemAtPath:toPath:error: is doing its job as expected and something else is recreating the old directory.
* What if you don't use NSFileManager to rename the directory, but rename([shootPath UTF8String], [newShootPath UTF8String])?
* To use the simplest dataset possible: what if you hardcode it to copy two specific mp4 files, where the second triggers the directory rename? Does this reproduce the bug?
* What if you comment out the code that copies the mp4 files -- do you still get two directories (which are now empty instead of containing copies of the files)?
* Are you using copyItemAtPath:toPath:error: like I did, or something else to copy the files?
--Andy
On Apr 17, 2011, at 10:41 PM, Scott Anguish wrote:
> not sure what to say, my code wasn’t doing that.
>
> I ended up churning through all the files once, finding the .mp4s, getting the whereas information and then making the directory I needed first.
>
> I just didn’t have more time to spend trying to figure it out.
>
> Now I feel like I need to though... :-/
>
> that it was ‘making’ a new directory with -APPL at the end was the oddest part. rather than moving it.
>
> On Apr 17, 2011, at 1:59 AM, Andy Lee wrote:
>
>> I tried to reproduce your problem by creating directories ~/wtf/FromHere and ~/wtf/ToHere, with three files in FromHere named 1, 2, and 3. I switch over to using "ToHere-NEW" when it detects a file whose name is >= "2".
>>
>> My test code renamed the directory and switched over to it just fine:
>>
>> - (void)test
>> {
>> NSFileManager *fileManager = [NSFileManager defaultManager];
>> NSString *fromDir = [@"~/wtf/FromHere" stringByStandardizingPath];
>> NSString *originalToDir = [@"~/wtf/ToHere" stringByStandardizingPath];
>> NSString *toDir = originalToDir;
>> NSError *error = nil;
>> NSArray *filesToCopy = [[fileManager contentsOfDirectoryAtPath:fromDir error:&error]
>> sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
>>
>> for (NSString *fileName in filesToCopy)
>> {
>> // Rename the destination directory if necessary.
>> if ([fileName intValue] >= 2)
>> {
>> NSLog(@"File name is %@; will rename directory if necessary.", fileName);
>>
>> NSString *newToDir = [originalToDir stringByAppendingString:@"-NEW"];
>>
>> if (![fileManager fileExistsAtPath:newToDir])
>> {
>> if ([fileManager moveItemAtPath:toDir toPath:newToDir error:&error])
>> {
>> NSLog(@"...SUCCESS: Renamed %@ to %@.", toDir, newToDir);
>> }
>> else
>> {
>> NSLog(@"...ERROR: Failed to rename %@ to %@ -- %@.", toDir, newToDir, error);
>> abort();
>> }
>>
>> toDir = newToDir;
>> }
>> else
>> {
>> NSLog(@"...%@ already exists; no need to rename.", newToDir);
>> }
>> }
>>
>> // Move the file to the directory at shootPath.
>> NSString *oldFilePath = [fromDir stringByAppendingPathComponent:fileName];
>> NSString *newFilePath = [toDir stringByAppendingPathComponent:fileName];
>>
>> if ([fileManager copyItemAtPath:oldFilePath toPath:newFilePath error:&error])
>> {
>> NSLog(@"Copied file %@ to %@.", oldFilePath, newFilePath);
>> }
>> else
>> {
>> NSLog(@"...ERROR: Failed to copy %@ to %@ -- %@.", oldFilePath, newFilePath, error);
>> abort();
>> }
>> }
>> }
>>
>> 2011-04-17 01:46:41.013 Scratcho[2630:a0f] Copied file /Users/alee/wtf/FromHere/1 to /Users/alee/wtf/ToHere/1.
>> 2011-04-17 01:46:41.014 Scratcho[2630:a0f] File name is 2; will rename directory if necessary.
>> 2011-04-17 01:46:41.069 Scratcho[2630:a0f] ...SUCCESS: Renamed /Users/alee/wtf/ToHere to /Users/alee/wtf/ToHere-NEW.
>> 2011-04-17 01:46:44.712 Scratcho[2630:a0f] Copied file /Users/alee/wtf/FromHere/2 to /Users/alee/wtf/ToHere-NEW/2.
>> 2011-04-17 01:46:44.712 Scratcho[2630:a0f] File name is 3; will rename directory if necessary.
>> 2011-04-17 01:46:44.713 Scratcho[2630:a0f] .../Users/alee/wtf/ToHere-NEW already exists; no need to rename.
>> 2011-04-17 01:46:46.934 Scratcho[2630:a0f] Copied file /Users/alee/wtf/FromHere/3 to /Users/alee/wtf/ToHere-NEW/3.
>>
>> --Andy
>>
>
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden