About This File
I encourted a problem with FilePath Length ( > 260 chars)
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx
QuoteMaximum Path Length Limitation
In the Windows API (with some exceptions discussed in the following paragraphs), the maximum length for a path is MAX_PATH, which is defined as 260 characters. A local path is structured in the following order: drive letter, colon, backslash, name components separated by backslashes, and a terminating null character. For example, the maximum path on drive D is "D:\some 256-character path string<NUL>" where "<NUL>" represents the invisible terminating null character for the current system codepage. (The characters < > are used here for visual clarity and cannot be part of a valid path string.
As a solution I try to use Windows "subst" command:
And I make a wrraper UDF for this.
Here is example how to use:
#include <AutoItConstants.au3> #include <FileConstants.au3> #include <MsgBoxConstants.au3> #include "SubstWrapper.au3" _Subst_Example1() ;~ _Subst_Example2() Func _Subst_Example1() _Subst_SetCallback(ConsoleWrite) ; Generate LONG FILE NAME Local $sFileName = '' For $i = 1 To 25 $sFileName &= '1234567890' Next $sFileName = $sFileName & '.au3' Local $sDestDir = StringLeft(@WindowsDir, 1) & ':\Subst_testing' ; usually C:\Subst_testing Local $sDest = $sDestDir & '\' & $sFileName MsgBox($MB_OK, _ StringLen($sFileName) & ' ' & StringLen($sDest), _ FileCopy(@ScriptFullPath, $sDest, $FC_CREATEPATH + $FC_OVERWRITE) _ ) ; Of course according to: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx ; To specify an extended-length path, use the "\\?\" prefix. For example, "\\?\D:\very long path". ; ; I could use ; FileCopy(@ScriptFullPath, "\\?\" & $sDest, $FC_CREATEPATH + $FC_OVERWRITE) ; ; but for showing how SubstWrapper.au3 works I will not add "\\?\" prefix Local $sDrive = 'r' $sDest = $sDrive & ':\' & $sFileName DirCreate($sDestDir) ; Associates a path with a drive letter. _Subst_Add($sDrive, $sDestDir) If @error Then MsgBox($MB_ICONERROR, '_Subst_Add', '@error = ' & @error & @CRLF & '@extended = ' & @extended) ShellExecute($sDrive & ':') MsgBox($MB_OK, _ StringLen($sFileName) & ' ' & StringLen($sDest), _ FileCopy(@ScriptFullPath, $sDest, $FC_OVERWRITE) _ ) MsgBox($MB_OK, 'Waiting', _ 'Check the content of ' & $sDrive & ':' & @CRLF & _ 'When you Click "OK" button the ' & $sDrive & ': will be Deleted ' & @CRLF & _ 'REMARK: Content should be save - not deleted' _ ) ; Deletes a substituted (virtual) drive. _Subst_Del($sDrive) If @error Then MsgBox($MB_ICONERROR, '_Subst_Del', '@error = ' & @error & @CRLF & '@extended = ' & @extended) EndFunc ;==>_Subst_Example1 Func _Subst_Example2() _Subst_SetCallback(ConsoleWrite) ; set drive letter with out colon and backspace Local $sDrive = 's' ; Associates a path with a drive letter. _Subst_Add($sDrive, @WorkingDir) If @error Then MsgBox($MB_ICONERROR, '_Subst_Add', '@error = ' & @error & @CRLF & '@extended = ' & @extended) ; list of current virtual drives Local $aResult_outer = _Subst_ListToArray() If @error Then MsgBox($MB_ICONERROR, '_Subst_List', '@error = ' & @error & @CRLF & '@extended = ' & @extended) Local $aResult_inner For $iOuter_idx = 0 To UBound($aResult_outer) - 1 $aResult_inner = $aResult_outer[$iOuter_idx] _ArrayDisplay($aResult_inner, '$aResult_inner[' & $iOuter_idx & ']') Next ShellExecute($sDrive & ':') MsgBox($MB_OK, 'Waiting', _ 'Check the content of ' & $sDrive & ':' & @CRLF & _ 'When you Click "OK" button the ' & $sDrive & ': will be Deleted ' & @CRLF & _ 'REMARK: Content should be save - not deleted' _ ) ; Deletes a substituted (virtual) drive. _Subst_Del($sDrive) If @error Then MsgBox($MB_ICONERROR, '_Subst_Del', '@error = ' & @error & @CRLF & '@extended = ' & @extended) ; list of current virtual drives _Subst_List() If @error Then MsgBox($MB_ICONERROR, '_Subst_List', '@error = ' & @error & @CRLF & '@extended = ' & @extended) EndFunc ;==>_Subst_Example2
Recommended Comments
There are no comments to display.