当前位置: 首页 > 知识库问答 >
问题:

C-如何将文件从cifs装载移动到本地hdd

锺离鸿
2023-03-14

当我尝试将文件从cifs挂载重命名为本地路径(将文件从服务器移动到本地hdd)时,我得到-1。我可以删除文件,我可以添加新文件,我只是不能使用rename()函数来做这件事。该程序以root身份运行,cifs挂载中的用户拥有共享和服务器上本地文件系统的完全权限。

服务器:Windows XP SP3 x32

本地:Ubuntu 13.04 x64

smb安装:

sudo mount -t cifs -o username=admin_account,password=<passw> \
  //server/share /local/mount/point

C代码:

void
function moveFile(char *fname){
  char *base;
  base = basename(fname);
  char newF[strlen(getSaveDir()) + strlen(base)];
  sprintf(newF,"%s%s", getSaveDir(), base);
  int result;
  result = rename(fname, newF);
  if( result == 0 ) {
    printf("Moved file: %s to %s", fname, newF);
  } else {
    printf("There was an error moving %s to %s (ID: %d)", fname, newF, result);
    //TODO figure out better fix than this
    remove(fname);
  }
}

共有2个答案

钦海荣
2023-03-14

在所有的可能性中,如果您在重命名失败后询问errno,您将发现它被设置为EXDEV。

我建议您添加该信息或确认它是EXDEV。

如果您要获取EXDEV,那么这是因为Linux限制,只有当oldpath和newpath位于相同的挂载文件系统上时,rename()才起作用。

从重命名(2)

   EXDEV  oldpath and newpath are not on the  same  mounted  file  system.
          (Linux  permits  a file system to be mounted at multiple points,
          but rename() does not work across different mount  points,  even
          if the same file system is mounted on both.)
许鸿志
2023-03-14

rename()只在同一个设备上工作,它只是更改其名称(或将名称“移动”到另一个目录)。rename()无法将文件数据从一个位置移动到另一个位置。

如果要复制或移动文件,您需要自己执行以下操作:

  • 打开源文件和目标文件
  • 从源文件中读取(),在循环中写入目标文件,直到结束
  • 取消源文件的链接()(仅当您要移动它时。)
 类似资料:
  • 我正在尝试将此文件加载到我的webview中,但它没有加载 文件路径类似于 /数据/用户/0/com。xyzapp。应用程序/缓存/临时文件。docx//这是GetPathh 下面是我的代码 第一项活动:- 第二项活动:- 如果我使用Action\u view 我因为“E/UncaughtException:android”而崩溃。操作系统。FileUriExposedException:file

  • 我想把一个html文件加载到WebView中。 请注意,在so上有很多相关的问题,但它们都涉及从资产文件夹获取**.html*。 但是我想从本地文件夹加载html文件,比如“d://abc.html”,因为如果我的html大约是10MB,那么相应的apk大小也会增加到10MB。

  • 我想每小时将更新的文件从本地文件系统复制到Hadoop,因为我想放入cron。我可以使用任何hadoop命令将更新的文件从本地复制到Hadoop吗?

  • 我需要使用python从组织终端下的本地上传文件到AWS S3存储桶。因为我是大型机资源,所以我对python不太了解,但是,当我尝试阅读一些内容时,我知道boto3可以帮助我。有人能帮我开始吗?

  • 如何将文件从HDFS复制到本地文件系统。文件下没有文件的物理位置,甚至没有目录。我如何将它们移到本地进行进一步的验证。我通过winscp进行了尝试。

  • 任务:我已经创建了一个片段抽屉,在这里我有textview,文本“MyName”就在我的图像下面,然后有nav_row项,所以我想做的是,当单击该文本时,它应该将活动从MainActivity切换到profileinfo,我创建了webview,它的活动profileinfo应该加载我的html文件...所以我做的是这里--> webview xml在这里--> profileinfo活动 这是我