package nsqd

import (
    "syscall"
    "unsafe"
)

var (
    modkernel32     = syscall.NewLazyDLL("kernel32.dll")
    procMoveFileExW = modkernel32.NewProc("MoveFileExW")
)

const (
    MOVEFILE_REPLACE_EXISTING = 1
)

func moveFileEx(sourceFile, targetFile *uint16, flags uint32) error {
    ret, _, err := procMoveFileExW.Call(uintptr(unsafe.Pointer(sourceFile)), uintptr(unsafe.Pointer(targetFile)), uintptr(flags))
    if ret == 0 {
        if err != nil {
            return err
        }
        return syscall.EINVAL
    }
    return nil
}

func atomicRename(sourceFile, targetFile string) error {
    lpReplacedFileName, err := syscall.UTF16PtrFromString(targetFile)
    if err != nil {
        return err
    }

    lpReplacementFileName, err := syscall.UTF16PtrFromString(sourceFile)
    if err != nil {
        return err
    }

    return moveFileEx(lpReplacementFileName, lpReplacedFileName, MOVEFILE_REPLACE_EXISTING)
}

rename.go的更多相关文章

  1. mac linux rename命令行批量修改文件名

    我的mac使用命令行批量修改名字时发现居然没有rename的指令: zsh: command not found: rename 所以使用HomeBrew先安装一下: ➜ ~ brew install ...

  2. log4j:ERROR Failed to rename [/log/xxx.log] to [/log/xxx.log.2016-11-23.log]

    Log4j报错: log4j:ERROR Failed to rename [/log/xxx.log] to [/log/xxx.log.2016-11-23.log] google了一下发现是个b ...

  3. gulp工具rename

    gulp 对文件批量重命名 gulp-rename重命名 var gulp = require('gulp'); var rename = require("gulp-rename" ...

  4. rename

    重命名文件名: # rename hosts.conf.正式配值文件 hosts.conf.正式配置文件 hosts.conf.正式配值文件 [root@monitor- vhost]# ls hos ...

  5. R12.2.6 installation failed with - Unable to rename database

    报错信息: 日志信息:/data/ebsdb/VIS/12.1.0/appsutil/log/VIS_ebstest/12222150.log Phase 3 Rename Database Exec ...

  6. gulp 外挂 rename 的使用

    安装和使用就不详细说了.前面有. gulpfile.js 的配置 var gulp = require('gulp'), rename = require('gulp-rename'), // 记得先 ...

  7. mysql 日志表rename 备份

    1. 按照原历史表新增一个新表(空表): mysql> create table history_log_new ...; 2. 给历史表重命名,并将新表重命名为历史表: mysql> R ...

  8. 批量改名工具 Bulk Rename Utility

    好用的批量改名工具 Bulk Rename Utility 功能: 这个工具既可以改文件名,也可以改目录. 使用技巧: 结合前缀4位 数字 可以让文件排列很整齐 例如:         0030 关于 ...

  9. python的rename原来这么用

    本来想实践应用一下如何批量修改,后来一想怎么那么麻烦,连最基本都都不会,简化到这份上再慢慢复杂之 一开始用help(os.rename)查了该方法的用法, 出来的解释太简单了,以为路径用的是和wind ...

  10. C# rename方法重命名文件

    记得C# File类中是没有rename这个方法 所以网上很多都用的是move moveTo copy+delete等这些方法 其实以上的方法 虽然可以实现功能 但看起来总觉得很蛋疼 今天百度 突然发 ...

随机推荐

  1. ruby:借助第三方类名如何查找第三方gem名称(zlib为例)

    rubygem中含有成千上万的第三方gem,网上书上扩展教程中都有指导如何使用第三方gem的例子.但是如果不幸这些例子都没有提及gem名称的话,如何只凭第三方类名或require名查找gem名称呢?换 ...

  2. OVS+DPDK Datapath 包分类技术

    本文主体内容译于[DPDK社区文档],但并没有逐字翻译,在原文的基础上进行了一些调整,增加了对TSS分类器的详细阐述. 1. 概览 本文描述了OVS+DPDK中的包分类器(datapath class ...

  3. jQuery结合lhgdialog弹出窗口,关闭时出现没有权限错误

    背景: 最近的项目,使用JQuery+lhgdialog窗口组件方式模拟弹窗,在关闭lhgdialog窗口时,出现以下错误: >jQuery没有权限 >调试时 w.readyState没有 ...

  4. H5页面转成图片并下载到本地

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  5. Python__flask初识

    1.  debug:在app.run()里面加上app.run(debug=True), 在浏览器中调试的时候可以直接显示出错误. 2.  在url中传递参数,可以这样 @app.route('/ch ...

  6. AS3编程规范

    整理了一些AS3的编程规范,有些规则对于大部分语言都是适用的,有什么问题请提出来,我会持续改进这份规范,谢谢!   [参考资料] 1.http://opensource.adobe.com/wiki/ ...

  7. Android 众多的布局属性详解

    http://www.open-open.com/lib/view/open1328686184311.html Android功能强大,界面华丽,但是众多的布局属性就害苦了开发者,下面这篇文章结合了 ...

  8. ubuntu 13.10 install wireshark

    ubuntu 13.10 install wireshark 今天在使用java jsoup操作remote server的是否,在本地执行可以成功返回内容,然后打成jar包,使用shell在 ser ...

  9. 神奇的namespace使用

    一大波概念正在来袭: 作用域与命名空间 相关概念 与命名空间相关的概念有:        声明域(declaration region)—— 声明标识符的区域.如在函数外面声明的全局变量,它的声明域为 ...

  10. Docker 跨主机网络方案分析

    PS:文章首发公众号,欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 上篇文章介绍了容器网络的单主机网络,本文将进一步介绍多 ...