예제 #1
0
def copyOrMove(elem, copy_move_flag, overwrite):
    if copy_move_flag == COPY:
        f = 0 if overwrite else win32file.COPY_FILE_FAIL_IF_EXISTS
        win32file.CopyFileEx(elem.path, elem.destpath, None, None, False, f)
    else:
        f = win32file.MOVEFILE_COPY_ALLOWED | win32file.MOVEFILE_REPLACE_EXISTING if overwrite else win32file.MOVEFILE_COPY_ALLOWED
        win32file.MoveFileEx(elem.path, elem.destpath, f)
예제 #2
0
          DestinationFile)
    # if TotalBytesTransferred > 100000:
    # return win32file.PROGRESS_STOP
    return win32file.PROGRESS_CONTINUE


temp_dir = win32api.GetTempPath()
fsrc = win32api.GetTempFileName(temp_dir, 'cfe')[0]
fdst = win32api.GetTempFileName(temp_dir, 'cfe')[0]
print(fsrc, fdst)

f = open(fsrc, 'w')
f.write('xxxxxxxxxxxxxxxx\n' * 32768)
f.close()
# add a couple of extra data streams
f = open(fsrc + ':stream_y', 'w')
f.write('yyyyyyyyyyyyyyyy\n' * 32768)
f.close()
f = open(fsrc + ':stream_z', 'w')
f.write('zzzzzzzzzzzzzzzz\n' * 32768)
f.close()

operation_desc = 'Copying ' + fsrc + ' to ' + fdst
win32file.CopyFileEx(fsrc,
                     fdst,
                     ProgressRoutine,
                     Data=operation_desc,
                     Cancel=False,
                     CopyFlags=win32file.COPY_FILE_RESTARTABLE,
                     Transaction=None)
예제 #3
0
파일: past.py 프로젝트: guredora403/falcon
def Execute(op, resume=False):
    """実行処理。リトライが必要になった項目数を返す。"""
    if resume: log.debug("Starting as resume mode...")
    retry = 0
    try:
        f = op.instructions["target"]
    except KeyError:
        log.error("Required key is not specified.")
        return False
    #end 処理刷るものなし
    copy_move_flag = op.instructions["copy_move_flag"]
    if not resume:  # resume modeではない=初期化
        op.output["all_OK"] = True
        op.output["retry"]["target"] = []
        op.output["percentage"] = 0
        op.output["copy_move_flag"] = copy_move_flag
        #ベースパスを決定
        op.output["basepath"] = os.path.dirname(f[0])
        op.output["destpath"] = op.instructions['to']
    #end 初期化
    basepath = op.output["basepath"]
    destpath = op.output["destpath"]
    log.debug("Base path: %s dest path: %s" % (basepath, destpath))
    log.debug("Retrieving file list...")
    lst = []
    for elem in f:
        if not basepath in elem:
            debug.log("Ummatched base path, skipping %s" % elem)
            continue
        #end ベースパスが合わない
        if os.path.isfile(elem):
            lst.append(Element(elem, basepath, destpath))
        else:
            e = Element(elem, basepath, destpath)
            if os.path.isdir(e.destpath) and not resume:
                _processExistingFolder(
                    op.output, elem)  #フォルダがもうあれば、その時点で確認に入れる(中のフォルダを展開しない)
            else:  #まだないか、確認済みなので追加
                _expandFolder(lst, elem, e, basepath, destpath)
            #end フォルダを展開するかしないか
        #end フォルダだった
    #end ファイルリスト作るループ
    #ファイルリスト作ったので、もともとの target に上書き
    f = lst
    log.debug("%d items found." % len(f))
    #コピーサイズの合計を計算
    total = 0
    for elem in f:
        if elem.size != -1: total += elem.size
    #end サイズを足す
    op.output['total_bytes'] = total
    op.output['current_bytes'] = 0
    log.debug("Size: %d bbytes" % total)
    log.debug("Start copying...")
    overwrite = 0 if resume else win32file.COPY_FILE_FAIL_IF_EXISTS
    for elem in f:
        if elem.destpath is None:  #フォルダ削除用
            try:
                win32.RemoveDirectory(elem.path, None)
            except win32file.error as err:
                log.debug(
                    "Error encountered when trying to delete moved folder: %s"
                    % str(err))
            #end except
        #end フォルダ消す
        try:
            if elem.isfile:
                win32file.CopyFileEx(elem.path, elem.destpath, None, None,
                                     False, overwrite)
            else:
                if resume and os.path.isdir(elem.destpath):
                    continue  #再開している場合はエラーになる前に逃げる
                win32file.CreateDirectory(elem.destpath, None)
        except win32file.error as err:
            log.error("Cannot create %s (%s)" % (elem.destpath, str(err)))
            ProcessError(op.output, elem, str(err), resume)
            continue
        #end except
        if copy_move_flag == MOVE:
            try:
                if elem.isfile: win32file.DeleteFile(elem.path)
            except win32file.error as err:
                log.debug("Error encountered when deleting moved file: %s" %
                          str(err))
            #end except
        #end 移動モード
        op.output["succeeded"] += 1
    #end 削除処理
    if len(op.output["retry"]["target"]) > 0:
        op.output["retry"]["operation"] = VERB
        retry = len(op.output["retry"]["target"])
    #end リトライあるか
    #終わった者はもう使わないので、ファイルリストは消してしまう
    op.instructions["target"] = []
    return retry