我正在尝试编写可在Linux和Windows上使用的复制文件功能 . 它适用于Linux,但在Windows上,我在尝试使用WinApi函数CopyFile()时收到错误代码5 .

In header File.h

这是我应该能够在Linux和Windows上使用的File命名空间中的自定义函数 .

class File

{

public:

static bool copyFile(std::string source, std::string destination);

private:

}

In File.cpp

对于Linux来说很简单:

#ifdef __unix__

#include "File.h"

bool File::copyFile(std::string source, std::string destination)

{

std::string arg = source + " " + destination;

return launchProcess("cp", arg);

}

#endif

在Windows特定的代码块中,我使用WinAPI(#include )函数CopyFile() . 这接受LPCWSTR数据类型而不是字符串 . 为了解决这个问题,我创建了一个将字符串转换为LPCWSTR类型的函数 .

#ifdef _WIN32

#include "File.h"

#include

std::wstring strtowstr(const std::string &str)

{

// Convert an ASCII string to a Unicode String

std::wstring wstrTo;

wchar_t *wszTo = new wchar_t[str.length() + 1];

wszTo[str.size()] = L'\0';

MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, wszTo,(int)str.length());

wstrTo = wszTo;

delete[] wszTo;

return wstrTo;

}

bool File::copyFile(std::string source, std::string destination)

{

std::wstring wsource = strtowstr(source);

std::wstring wdestination = strtowstr(destination);

int result = CopyFileW(wsource.c_str(), wdestination.c_str(), TRUE);

//for debugging...

std::wcout << "The error is " << GetLastError() <<:endl>

std::wcout << wsource.c_str() << std::endl;

std::wcout << wdestination.c_str() << std::endl;

if (result == 0)

{

return false;

}

return true;

}

#endif

In my Test Programme

TEST(all,main_copy_file)

{

std::cout << "Testing copyFile() function..." << std::endl;

std::string srcDir = File::currentWorkingDirectory() + "srcDir";

File::makeDirectory(srcDir);

std::string destDir = File::currentWorkingDirectory() + "destDir/";

File::makeDirectory(destDir);

File::makeFile(srcDir, "testFile", ".txt");

ASSERT_TRUE(File::fileExists(srcDir + "/testFile.txt")) << "Error: Test file has not been generated" << std::endl;

ASSERT_TRUE(File::directoryExists(destDir)) << "Error: Destination directory does not exist" <<:endl>

ASSERT_TRUE(File::copyFile(srcDir + "/testFile.txt", destDir)) << "Error: Coppy unsucsessfull" << std::endl;

ASSERT_TRUE(File::fileExists(destDir + "/testFile.txt")) << "Error: CoppyFile() flagged as sucsessfull but file does not exist" << std::endl;

}

In the application Output (on Windows)

/*

Testing copyFile() function...

The error is 5

C:\GIT\CorteX\Externals\OSAL\build\Debug/srcDir/testFile.txt

C:\GIT\CorteX\Externals\OSAL\build\Debug/destDir/

error: Value of: File::copyFile(srcDir + "/testFile.txt", destDir)

Actual: false

Expected: true

Error: Coppy unsucsessfull

*/

错误代码5是访问被拒绝错误 . 我认为当目录不存在,目录在其他地方打开,或者我没有权限时,它会出现此错误 .

由于我已经测试过该目录确实存在,我认为它必须是后两者之一 . 我可能只限制了管理员权限(我不知道),但我可以在没有管理员权限的情况下粘贴到“destDir” . 那么也许它认为该目录是开放的?是否存在确保目录已关闭的命令?

在Linux上运行时,测试成功 .

java copyfile失败_如何修复CopyFile()错误5 - 访问被拒绝错误相关推荐

  1. mysql ssh错误_通过SSH隧道连接时,MySQL访问被拒绝错误

    几个月来,我一直通过SSH隧道连接到我们本地测试服务器上运行的 MySQL实例,没有任何问题.突然之间,没有我能想到的任何变化,服务器已经开始拒绝来自Sequel Pro的登录尝试,但错误: Unab ...

  2. html文件访问遭拒,防止IE中出现“ SCRIPT5:访问被拒绝”错误

    场景:A.com上的页面A具有一个包含B.com上的页面B的IFrame.网页B使用jQuery的1.10.1和它 不会 需要页次A.沟通 不管这个事实如何,jQuery在IE9和IE10中都会生成& ...

  3. 解决删除文件、文件夹错误,访问被拒绝请确定磁盘未满或未被写保

    解决删除文件.文件夹错误,访问被拒绝请确定磁盘未满或未被写保护 作者:佚名   我们在删除硬盘某个文件的时候,经常会弹出"删除文件错误,访问被拒绝请确定磁盘未满或未被写保护"的警告 ...

  4. Java 9失败以及如何修复它们

    首先,我们说这是一个没有判断力的区域. 正如CodeFX的作者和热情的软件开发人员Nicolai Parlog在http://java9.wtf/页面的描述中说的那样,其目的不是玩怪罪游戏,而是展示J ...

  5. mac 更换默认蓝牙适配器_如何修复Mac上的“蓝牙不可用”错误

    蓝牙以我们通常不会意识到的方式使生活变得如此轻松.蓝牙技术最近有很多发展,特别是具有连续性,切换,文件共享等功能.然后是依赖蓝牙LE的iBeacon和其他几种技术. 在您的Mac上,可能会出现&quo ...

  6. java copyfile失败_我在用copyfile方法是文件拒绝访问,不明白?

    public static void copyFile(File srcFile,File destFile)throws IOException{ if(!srcFile.exists()){ th ...

  7. 我的世界手机版java安装失败_我的世界中国版JAVA路径错误的解决方法分享

    我的世界中国版JAVA路径错误该怎么解决呢?JAVA是Minecraft运行的虚拟环境必要条件,需要您安装后才开始游戏.很多童鞋在安装过程中都遇到了JAVA路径错误的提示,这是什么原因导致的?九游必须 ...

  8. 麦块我的世界盒子java安装失败_我的世界无法启动、崩溃问题解决办法

    来源:18183日期:2018-10-28 03:58:23 我的世界在下载安装时候,会遇到各种各样的问题,下面小编就给大家带来遇到这些问题的解决办法,希望对大家有所帮助. 以下所列为较为常见的无法启 ...

  9. java授权失败_自定义Spring Security的身份验证失败处理方法

    1.概述 在本快速教程中,我们将演示如何在Spring Boot应用程序中自定义Spring Security的身份验证失败处理.目标是使用表单登录方法对用户进行身份验证. 2.认证和授权(Authe ...

  10. java转行失败_转行学JAVA,成功和失败的原因

    Java是所有编程中使用范围最广的一种语言,在各种编程语言中排名位居榜首,也是一种开源语言,市面上很多大型网站.APP都是用Java来完成的.有些人转行Java成功有些人失败,西安汇杰.用友产业学院帮 ...

最新文章

  1. 关于Jquery中ajax方法data参数用法
  2. 【企业管理】价值创造的来源
  3. 使用gethostname()函数和gethostbyname()函数获取主机相关信息
  4. SMO算法原理转载+自己补充
  5. jboss ds derby
  6. java p8级别_JAVA程序员月入5000+很迷茫,如何能在一年内改变达到月入过万?
  7. Inno Setup 检测已安装的.NET Framework 版本
  8. Codeforces 148D:Bag of mice 概率DP
  9. k-近邻算法 ---sklearn
  10. c语言串逐位和 思路,蓝桥杯c语言练习题答案.doc
  11. DevExpress项目升级总结
  12. Windows下安装Oracle11g数据库
  13. 七大步教你征服丈母娘
  14. 人生理解---3、不想学习的时候怎么办
  15. 双向晶闸管控制AC220V电机
  16. 机器学习中的评估指标与损失函数
  17. c语言课程设计--打飞碟源代码,飞碟游戏(飞碟游戏规则)
  18. liferay mysql_Liferay学习笔记(一)Liferay Portal5.2.3环境的初步搭建
  19. 金蝶软件服务器地址怎么修改,怎样修改金蝶系统服务器地址
  20. python 使用钉钉机器人发送消息至钉钉

热门文章

  1. Julia: 如何转换PyPlot的X轴的日期格式?
  2. 阿里云存储掌门人吴结生:微秒存储时代,阿里云凭什么领跑!
  3. 如何判断真假“中台”?
  4. 【诚邀】ZStack新品战略发布会4月16号如约开启
  5. 阿里云郑晓:浅谈GPU虚拟化技术(第四章)
  6. 【雷达通信】基于matlab联邦滤波算法惯性+GPS+地磁组合导航仿真【含Matlab源码 1276期】
  7. 【优化算法】人工鱼群优化算法(AFSA)【含Matlab源码 1078期】
  8. 将字符'0'-'9'转换为数字(c语言)
  9. 蓝桥杯_算法训练_审美课
  10. C/C++ 各种进制的表示方法/ 进制前缀