Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    Curious about Browser->IsDir()

    SDK Help
    0
    7
    540
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      Helper
      last edited by

      On 28/04/2013 at 21:10, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   R14 
      Platform:   Windows  ;   
      Language(s) :     C++  ;

      ---------
      Hi Folks,

      I'm just curious about what the difference is between the following code snippets. The first one works, but the second one doesn't:

        
      // Folder is an AutoAlloc BrowseFiles...   
        
      if(Folder->IsDir())   
      {   
          GePrint("This way works...!");   
      }   
        
      if(Folder->IsDir() == TRUE)   
      {   
          GePrint("This way doesn't work...");   
      }   
      

      What's the technical/C++ difference here and why does one way work but the other not? I'm just curious because having Folder->IsDir() == FALSE works fine, but having TRUE does not..

      WP.

      1 Reply Last reply Reply Quote 0
      • H
        Helper
        last edited by

        On 29/04/2013 at 06:56, xxxxxxxx wrote:

        Well Bool in C4D SDK is actually an Integer (int)  while FALSE if 0 and TRUE is 1.
        The problem is that Bool can also be 5 or any other Integer value.
        If IsDir() return some other value as 1 for true then if(IsDir()) will work but if(IsDir()==TRUE) will not work because if(5 == 1) is false.

        Some times C4D SDK uses NOTOK = (-1)  as a Bool value too.

        1 Reply Last reply Reply Quote 0
        • H
          Helper
          last edited by

          On 29/04/2013 at 13:28, xxxxxxxx wrote:

          While it is true that Bool is an integer, it should be returning strict TRUE/FALSE values.  The docs say that it returns TRUE if this is a directory.  So, the second conditional should be working or it's a bug in the SDK (or your code).

          1 Reply Last reply Reply Quote 0
          • H
            Helper
            last edited by

            On 29/04/2013 at 13:53, xxxxxxxx wrote:

            not sure how it is in cpp, but in python and c# the lazy ass implicit notation behaves different 
            than the explicit notation.

            def foo(v) :
                if v: print 'imp', True
                else: print 'imp', False
                
                if v == True: print 'exp', True
                else: print 'exp', False
                    
            print 0
            foo(0)
            print -1
            foo(-1)
                
            \>>0
            \>>imp False
            \>>exp False
            \>>-1
            \>>imp True
            \>>exp False
            
            1 Reply Last reply Reply Quote 0
            • H
              Helper
              last edited by

              On 29/04/2013 at 14:19, xxxxxxxx wrote:

              @littledevil: The same in example in C++ will print the same results.

              http://ideone.com/JgkQcJ

              Best,
              -Niklas

              1 Reply Last reply Reply Quote 0
              • H
                Helper
                last edited by

                On 29/04/2013 at 14:48, xxxxxxxx wrote:

                Originally posted by xxxxxxxx

                <ADDRESS>
                User Information:
                Cinema 4D Version:   R14 
                Platform:   Windows  ;   
                Language(s) :    
                C++  ;

                ---------
                </ADDRESS> Hi Folks,

                I'm just curious about what the difference is between the following code snippets. The first one works, but the second one doesn't:

                 
                // Folder is an AutoAlloc BrowseFiles...   
                 
                if(Folder->IsDir())   
                {   
                    GePrint("This way works...!");   
                }   
                 
                if(Folder->IsDir() == TRUE)   
                {   
                    GePrint("This way doesn't work...");   
                }   
                

                What's the technical/C++ difference here and why does one way work but the other not? I'm just curious because having Folder->IsDir() == FALSE works fine, but having TRUE does not..

                WP.

                It's a Windows specific bug (on the Mac it's fine) - the return value on Windows is the Win32 FILE_ATTRIBUTE_DIRECTORY constant (instead of TRUE). I'll file a bug for it. For the time being please use the code block of your first scope as workaround instead of comparing it with "TRUE".

                Best regards,

                Wilfried

                1 Reply Last reply Reply Quote 0
                • H
                  Helper
                  last edited by

                  On 29/04/2013 at 19:01, xxxxxxxx wrote:

                  Thanks again everyone.

                  WP.

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post