Version 1.0.0
309 downloads
I encourted a problem with FilePath Length ( > 260 chars)
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx
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
SUPPORT TOPIC IS HERE.