Home | History | Annotate | Download | only in Common
      1 ## @file

      2 # Override built in function file.open to provide support for long file path

      3 #

      4 # Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>

      5 # This program and the accompanying materials

      6 # are licensed and made available under the terms and conditions of the BSD License

      7 # which accompanies this distribution.  The full text of the license may be found at

      8 # http://opensource.org/licenses/bsd-license.php

      9 #

     10 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

     11 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

     12 #

     13 
     14 import os
     15 import platform
     16 import shutil
     17 import codecs
     18 
     19 ##

     20 # OpenLongPath

     21 # Convert a file path to a long file path

     22 #

     23 def LongFilePath(FileName):
     24     FileName = os.path.normpath(FileName)
     25     if platform.system() == 'Windows':
     26         if FileName.startswith('\\\\?\\'):
     27             return FileName
     28         if FileName.startswith('\\\\'):
     29             return '\\\\?\\UNC\\' + FileName[2:]
     30         if os.path.isabs(FileName):
     31             return '\\\\?\\' + FileName
     32     return FileName
     33 
     34 ##
     35 # OpenLongFilePath
     36 # wrap open to support opening a long file path
     37 #
     38 def OpenLongFilePath(FileName, Mode='r', Buffer= -1):
     39     return open(LongFilePath(FileName), Mode, Buffer)
     40 
     41 def CodecOpenLongFilePath(Filename, Mode='rb', Encoding=None, Errors='strict', Buffering=1):
     42     return codecs.open(LongFilePath(Filename), Mode, Encoding, Errors, Buffering)
     43 
     44 ##
     45 # CopyLongFilePath
     46 # wrap copyfile to support copy a long file path
     47 #
     48 def CopyLongFilePath(src, dst):
     49     with open(LongFilePath(src), 'rb') as fsrc:
     50         with open(LongFilePath(dst), 'wb') as fdst:
     51             shutil.copyfileobj(fsrc, fdst)
     52 
     53 ## Convert a python unicode string to a normal string
     54 #
     55 # Convert a python unicode string to a normal string
     56 # UniToStr(u'I am a string') is 'I am a string'
     57 #
     58 # @param Uni:  The python unicode string
     59 #
     60 # @retval:     The formatted normal string
     61 #
     62 def UniToStr(Uni):
     63     return repr(Uni)[2:-1]
     64