Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Linux中使用C++; 如何在Linux中使用C++程序将文件从一个位置移动到另一个位置? 我已经编写了一个程序来实现这一点,它会运行,但是当我尝试将文件移动到其他目录时,它不会移动该文件,我会从cout语句中得到错误消息。当我尝试重命名文件时,将其移动到具有新名称的同一目录中,它会起作用。如何修复代码,使其能够将文件移动到另一个目录_C++_Linux - Fatal编程技术网

如何在Linux中使用C++; 如何在Linux中使用C++程序将文件从一个位置移动到另一个位置? 我已经编写了一个程序来实现这一点,它会运行,但是当我尝试将文件移动到其他目录时,它不会移动该文件,我会从cout语句中得到错误消息。当我尝试重命名文件时,将其移动到具有新名称的同一目录中,它会起作用。如何修复代码,使其能够将文件移动到另一个目录

如何在Linux中使用C++; 如何在Linux中使用C++程序将文件从一个位置移动到另一个位置? 我已经编写了一个程序来实现这一点,它会运行,但是当我尝试将文件移动到其他目录时,它不会移动该文件,我会从cout语句中得到错误消息。当我尝试重命名文件时,将其移动到具有新名称的同一目录中,它会起作用。如何修复代码,使其能够将文件移动到另一个目录,c++,linux,C++,Linux,以下是我编写的代码: #include <iostream> #include <stdio.h> using namespace std; int main () { int result=1; char oldname[500]; char newname[500]; cout << "Enter the name of a file you want to move (include directory structure)"; c

以下是我编写的代码:

#include <iostream>
#include <stdio.h>
using namespace std;

int main ()
{
  int result=1;
  char oldname[500];
  char newname[500];
  cout << "Enter the name of a file you want to move (include directory structure)";
  cin >> oldname;
  cout << "Enter the new location (include directory structure)";
  cin >> newname;

  result = rename( oldname , newname );
  if ( result == 0 )
    cout << "File successfully moved" << endl;
  else
    cout << "Error moving file" << endl;
  return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
int结果=1;
charoldname[500];
char newname[500];
cout>oldname;
cout>newname;
结果=重命名(旧名称、新名称);
如果(结果==0)

cout如何修复程序取决于移动(重命名)失败的原因

可以使用查找故障原因


在这种情况下,必须确保源文件存在


对于需要考虑的所有事项,以稳健地执行移动,我建议研究
mv
命令的实现。

如何修复程序取决于移动(重命名)失败的原因

可以使用查找故障原因


在这种情况下,必须确保源文件存在


对于所有需要考虑以稳健地执行移动的事项,我建议研究
mv
命令的实现。

您的代码在大多数情况下都可以工作。但您忽略了一些重要事项,在这种情况下,它将中断:

  • 显而易见的事情,如权限,不存在的路径
  • 500个字符或更多的路径。不要将静态分配内存用于
    oldname
    newname
  • 使用
    rename()
    无法在文件系统之间移动,因此请这样做(包括
    iostream

    ifstream-ifs(oldname,ios::in | ios::binary);
    ofs流(newname,ios::out | ios::binary);
    
    ofs您的代码在大多数情况下都能正常工作。但是您忽略了一些重要的事情,在这种情况下,它会崩溃:

    • 显而易见的事情,如权限,不存在的路径
    • 500个字符或更多的路径。不要将静态分配内存用于
      oldname
      newname
    • 使用
      rename()
      无法在文件系统之间移动,因此请这样做(包括
      iostream

      ifstream-ifs(oldname,ios::in | ios::binary);
      ofs流(newname,ios::out | ios::binary);
      

      无论你想做什么,首先用
      重命名
      命令在终端上试一下。一旦你成功了,然后你可以用一个程序做同样的事情看看这些答案:这个答案可能会给你更多的洞察力。我不敢相信有人会问:你到底在
      oldname
      中键入了什么?
      ls-l
      对该字符串有何意义?与
      newname
      相同。
      rename
      函数不创建目录。因此,您最好在移动之前自己创建目录。无论您是否尝试这样做,请先在终端上使用
      rename
      命令进行尝试。一旦您能够成功使用它,您可以尝试执行以下操作:程序也一样看看这些答案:答案可能会给你更多的洞察力。我不敢相信有人会问:你到底为
      oldname
      键入了什么?
      ls-l
      对这个字符串说了什么?对于
      newname
      也一样。
      rename
      函数不会创建目录。所以,你最好r在移动之前自己创建。perror的错误是“没有这样的文件或目录”。我尝试将其移动到的目录确实存在,并且我将权限设置为“创建和删除文件”,因此我不明白为什么会收到该错误消息。@softengstu您是如何验证该目录存在的?我尝试将其移动到我在主页中看到的Documents文件夹,但当我刚才运行shell脚本进行双重检查时,它似乎不存在t、 我还创建了一个目录,然后尝试将文件移动到我刚刚创建的目录,我收到了相同的错误消息。如果它似乎不存在,那么这显然就是您无法将文件移动到那里的原因。抱歉,我在shell脚本中犯了一个错误(最初没有包含完整的目录结构)-它确实存在。perror的错误是“没有这样的文件或目录”。我尝试将其移动到的目录确实存在,并且我将权限设置为“创建和删除文件”,因此我不明白为什么会收到该错误消息。@softengstu您是如何验证该目录存在的?我尝试将其移动到我在主页中看到的Documents文件夹,但当我刚才运行shell脚本进行双重检查时,它似乎不存在t、 我还创建了一个目录,然后尝试将文件移动到我刚刚创建的目录,我收到了相同的错误消息。如果它似乎不存在,那么这显然就是您无法将文件移动到那里的原因。抱歉,我在shell脚本中犯了一个错误(最初没有包含完整的目录结构)-它确实存在。您建议复制到其他fs无法保留move应保留的权限。这一点很好!atime、mtime、ctime、UID和GID也不会保留。使用
      fstat()可以避免(如果需要)所有这一切
      在读取内容之前对原始文件进行修改。在写入之前,可以使用
      mknod
      使用内存中的元数据,并且只在创建文件后才开始写入。但是,您的代码将变得非常长…输入和输出标志是冗余的。您建议的复制到其他fs的权限无法保留,无法移动到ld preserve。这一点很好!atime、mtime、ctime、UID和GID也没有被保留。如果需要,可以在读取内容之前对原始文件使用
      fstat()
      。在写入之前,可以使用
      mknod
      使用我提供的元数据
      ifstream ifs(oldname, ios::in | ios::binary);
      ofstream ofs(newname, ios::out | ios::binary);
      ofs << ifs.rdbuf();
      remove(oldname);