• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: renaming directories and moving files into them (NSFileManager)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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

  • Follow-Ups:
    • Re: renaming directories and moving files into them (NSFileManager)
      • From: Scott Anguish <email@hidden>
    • Re: renaming directories and moving files into them (NSFileManager)
      • From: Ken Thomases <email@hidden>
    • Re: renaming directories and moving files into them (NSFileManager)
      • From: Andy Lee <email@hidden>
References: 
 >renaming directories and moving files into them (NSFileManager) (From: Scott Anguish <email@hidden>)
 >Re: renaming directories and moving files into them (NSFileManager) (From: Andy Lee <email@hidden>)
 >Re: renaming directories and moving files into them (NSFileManager) (From: Scott Anguish <email@hidden>)

  • Prev by Date: Re: Proper way to create a singleton without @synchronized ?
  • Next by Date: Re: Proper way to create a singleton without @synchronized ?
  • Previous by thread: Re: renaming directories and moving files into them (NSFileManager)
  • Next by thread: Re: renaming directories and moving files into them (NSFileManager)
  • Index(es):
    • Date
    • Thread