Dear Community User! We have started the migration process.
This community is now in READ ONLY mode.
Read more: Important information on the platform change.

cancel
Showing results for 
Search instead for 
Did you mean: 
SOLVED

Path length too long for the Directory function blocks

Path length too long for the Directory function blocks

aFouraker
Occasional Contributor

I was trying to get the default path of the data folder available in the PLC application using the IL_DirGetCurrentAsycn and then browse the files with IL_DirReadAsync. However, apparently the max path that can be returned by the first block is 80 characters and the max path that can be recieved by the second is 80 characters. The path to the default data storage on the controller is longer than that. 

Is there a way to change that?

4 REPLIES 4

CodeShepherd
Community Moderator
Community Moderator

As far as I know is this a hard coded restriction from the CodeSys function blocks. You can do a work around changing the root folder you are actually working on:

enResult := SysDirSetCurrent(szDir:=strRootPathBrowse);

 

Yes, it's true the 80 char's are a limitation by the CoDeSys function which is used. The is a active request to CoDeSys to enlarge the string length. Right now, you can't retrieve longer path names than 80 char's. But you can set longer path names by splitting the path in pices of max. 80 char's.

Example you want to acces file: /myPathWith80Chars/subdir1/subDir2/myFileName.txt There are 2 ways to do it:

1) Use SysDirSetCurrent 2x.
- Set absolute path (with "/" at start of string) to: "/myPathWith80Chars/"
- Set relative path (without "/" at start of string) to: subdir1/subDir2
- Read or write file with file name "myFileName.txt"

2) Use SysDirSetCurrent 1x and relative file name
- Set absolute path (with "/" at start of string) to: "/myPathWith80Chars/"
- Read or write file with relative path and file name (without "/" at start of string) "subdir1/subDir2/myFileName.txt"

aFouraker
Occasional Contributor

Is it possible to use a higher level directory. For example, let's say I want to copy data from a USB. Can I do something like '../../../media/sda1/' to get access from a directory?

Icon--AD-black-48x48Icon--address-consumer-data-black-48x48Icon--appointment-black-48x48Icon--back-left-black-48x48Icon--calendar-black-48x48Icon--center-alignedIcon--Checkbox-checkIcon--clock-black-48x48Icon--close-black-48x48Icon--compare-black-48x48Icon--confirmation-black-48x48Icon--dealer-details-black-48x48Icon--delete-black-48x48Icon--delivery-black-48x48Icon--down-black-48x48Icon--download-black-48x48Ic-OverlayAlertIcon--externallink-black-48x48Icon-Filledforward-right_adjustedIcon--grid-view-black-48x48IC_gd_Check-Circle170821_Icons_Community170823_Bosch_Icons170823_Bosch_Icons170821_Icons_CommunityIC-logout170821_Icons_Community170825_Bosch_Icons170821_Icons_CommunityIC-shopping-cart2170821_Icons_CommunityIC-upIC_UserIcon--imageIcon--info-i-black-48x48Icon--left-alignedIcon--Less-minimize-black-48x48Icon-FilledIcon--List-Check-grennIcon--List-Check-blackIcon--List-Cross-blackIcon--list-view-mobile-black-48x48Icon--list-view-black-48x48Icon--More-Maximize-black-48x48Icon--my-product-black-48x48Icon--newsletter-black-48x48Icon--payment-black-48x48Icon--print-black-48x48Icon--promotion-black-48x48Icon--registration-black-48x48Icon--Reset-black-48x48Icon--right-alignedshare-circle1Icon--share-black-48x48Icon--shopping-bag-black-48x48Icon-shopping-cartIcon--start-play-black-48x48Icon--store-locator-black-48x48Ic-OverlayAlertIcon--summary-black-48x48tumblrIcon-FilledvineIc-OverlayAlertwhishlist