cub*_*ot8 5 c c++ windows boost file
我有一个外部USB,NTFS格式的硬盘驱动器,其中包含许多文件,我需要最终复制到Windows Server 2008 R2计算机上的驱动器.
驱动器上的文件由安装在Solaris上的驱动器运行的脚本放置在那里.执行此副本的用户不小心并在Windows计算机上编辑了他们的副本脚本,从而产生了shell脚本行,例如:
cp /sourceDir/sourceFileName /externalDrivePath/targetFileName\r\n
Run Code Online (Sandbox Code Playgroud)
因此,外部驱动器上的文件在其文件名中有一个尾随回车符.标准Windows复制实用程序(copy,xcopy,robocopy)无法复制这些文件,错误为0x7B/123:"文件名,目录名称或卷标语法不正确."
我已经测试过,并且相当确定如果我将驱动器再次安装在Linux机器上,我应该可以使用以下命令修复文件:
mv /externalDrive/targetFileName\r /externalDrivePath/targetFileName\n
Run Code Online (Sandbox Code Playgroud)
但是,我没有立即访问Linux机器.
到目前为止我已经尝试过修复/移动这些文件:
Windows Server 2008 R2上的"应用程序"解决方案:
copy E:\externalDrivePath\targetFileName* anotherPath.失败,出现0x7B错误.dir /xWindows Server 2008 R2上的"编程"解决方案:
我还涉及在OS X机器上安装此驱动器以运行副本,期望它将像Solaris那样为NTFS驱动器提供支持.但是,它无法将类似的错误消息复制到Windows - 我猜OS X的NTFS实现更像"Windows-like"?
如果这在Windows上是可解的,我觉得它要么需要一个非常低级的C函数来操作FILE本身,而不是根据它的字符串文件名"打开"它.不知道该怎么做.那个,或者我不知道的一些文件修复工具已经包含了这个功能.
任何替代方法或建议如何实现我所描述的将是最受欢迎的.
我在 90 年代中期的 Windows 3.11 上也遇到过类似的问题。
我最终使用了renameC 程序(在 中声明<stdio.h>)。
如果失败,您可以尝试低级 C 系统调用:open,read并将write文件复制到新名称。
低级调用通常会绕过用户友好的高级函数所施加的限制。