标签: file-copying

Python:检查shutil.copyfile何时完成

我有这样的代码:

for file in file_list:
    shutil.copyfile(file,newpath)
#do further actions
Run Code Online (Sandbox Code Playgroud)

这是一个问题,在 #do further actions我使用复制的文件时,我需要确保shutil.copyfile函数完成他们的任务.我怎样才能确定这一点?

python shutil file-copying

7
推荐指数
1
解决办法
6276
查看次数

File.Copy会阻止其他应用写入文件吗?

我想复制一些由另一个应用程序编写的文本文件,但我不想做任何事情来阻止其他应用程序.从写入这些文件.

我使用File.Copy,从System.IO namespace,C#.NET框架2.0.

我检查了MSDN的文档,但没有具体说明File.Copy使用的方法.它是非托管API调用的包装器吗?

是否File.Copy锁定,或阻止正在复制文件以任何方式?

在此先感谢您的任何信息.

c# file-io file file-copying

7
推荐指数
1
解决办法
353
查看次数

如何将文件复制到Python脚本中的特定文件夹?

我有一个存储在变量(例如)filePath中的文件的路径.我想将该特定文件复制到Python脚本中的另一个特定文件夹中.

我试过了

folderPath = (os.getcwd() + "/folder_name/") #to get the path of the folder
shutil.copyfile(filePath, folderPath)
Run Code Online (Sandbox Code Playgroud)

但是我收到了一个错误 IOError: [Errno 21] Is a directory.

我怎么解决这个问题?

我的问题似乎与如何在python中复制文件有关? .但实际上,我想将文件复制到文件夹/目录,而大多数答案都提到将一个文件复制到另一个文件.

python filesystems copy file file-copying

7
推荐指数
1
解决办法
2万
查看次数

为什么我无法将我的文件复制到 docker 容器中?

我正在尝试将我的文件移动到 apache 图像的 htdocs 文件夹中。她是我的 dockerfile 的样子:

FROM httpd:2.4
MAINTAINER Ankit
COPY ./public-html/ /usr/local/apache2/htdocs/
Run Code Online (Sandbox Code Playgroud)

但是 COPY 命令不会将文件复制到容器中。这是输出 - 默认情况下 index.html 在那里,我要复制的是 public-html 文件夹:

root@8453b6ffa6fd:/usr/local/apache2/htdocs# ls
index.html
Run Code Online (Sandbox Code Playgroud)

有什么我想念的吗?

更新:public-html 文件夹没有被复制,但文件 index.html 被复制到那里,这种行为的原因是什么?

UPDATE2:这是我最新的 dockerfile,用于构建和运行容器的命令。

Dockerfile:
FROM httpd:2.4
MAINTAINER Ankit
COPY public-html/ /usr/local/apache2/htdocs/public-html/

docker build -f Dockerfile -t apache .
docker run -d --name apws -v /Users/ankitsahu/workspace/docker_practi
ce/public-html:/usr/local/apache2/htdocs/ -p 80:80 apache
Run Code Online (Sandbox Code Playgroud)

当我使用 exec 命令检查内容时:

root@b54e53a231b7:/usr/local/apache2/htdocs# ls -a
.  ..  index.html  sample.html  try
Run Code Online (Sandbox Code Playgroud)

apache file-copying docker

7
推荐指数
1
解决办法
9402
查看次数

在CopyFileEx的回调中阻止是否安全?

Windows API函数CopyFileEx允许指定回调函数,然后在复制文件的一部分时调用该函数,例如向用户提供有关进度的反馈.

这在我的程序中工作正常,但我现在有一个额外的要求:我需要暂时暂停复制过程,以便将系统负载保持一段时间(可能长达几个小时),然后恢复它.这可能在任何时候发生,通常有一个大型文件(几个100千兆字节),只是部分复制,所以中止该过程并重新启动它不是一个好的选择,因为这意味着可能99%的文件,已被复制,需要再次复制.

这样做的一个选择就是在调用回调时让执行副本的线程休眠,例如

function ProgressCallback(
  _TotalFileSize, _TotalBytesTransferred, _StreamSize,
  _StreamBytesTransferred: LARGE_INTEGER;
  _StreamNumber, _CallbackReason: LongWord;
  _SourceFile, _DestinationFile: THandle; _Data: Pointer): LongWord;
  far; stdcall;
begin
  // [...]
  while gblPauseFlag do
    sleep(100);
end;
Run Code Online (Sandbox Code Playgroud)

(这当然是简化的代码.原始版本太复杂了,无法在此处发布.)gblPauseFlag将由应用程序中的另一个线程设置和重置,该线程检查要暂停的条件.

我知道有更好的方法来暂停线程(事件,关键部分或其他),但这里的问题只是:在回调函数中暂停复制线程是否安全?或者它会阻止一些Windows功能或资源?

从示例代码中可以看出,这是一个Delphi程序,但我认为这并不重要,所以我没有将问题标记为[delphi].

编辑:我可以传递标志COPY_FILE_RESTARTABLE,但是:

如果复制失败,将在目标文件中跟踪副本的进度.通过为失败的调用中使用的lpExistingFileName和lpNewFileName指定相同的值,可以在以后重新启动失败的副本.这可能会显着减慢复制操作,因为在复制操作期间可能会多次刷新新文件.

来源:CopyFileEx文档

所以我宁愿尽量避免这种情况.

winapi file-copying

7
推荐指数
1
解决办法
191
查看次数

复制粘贴怎么可能?

我想知道长时间使用计算机后,感觉复制粘贴是基本功能,但我知道它不是。所以问题是这到底是如何运作的?

我想到了如何实现这一点的所有想法,但每次我想出不同的文件格式(如 gif、jpg、txt、png、mp3、mp4、JSON、YML 等)时,我都会陷入困境,而且越往后越复杂它变得像快捷方式,链接,然后是目录。就像它如何在 chrome 中复制搜索结果中的图像,而有时由于限制您无法复制某些内容,您也无法选择某些内容,然后您无法复制它,而有时即使您无法在层次结构中选择儿童被复制,那么它是如何实现的。

但是,当有人问我复制粘贴通常如何工作时,我的回答是:复制某些内容时,会将复制的项目放入内存,并将其粘贴到某处时,操作系统会找出应复制到的位置并复制所有文件到二进制并复制它。

这可能不是真的,所以你能解释一下它是如何工作的。了解如何编写用于复制粘贴的代码也会很有帮助。

operating-system copy-paste system copying file-copying

7
推荐指数
1
解决办法
2857
查看次数

使用其原始权限复制文件

使用File.Copy()方法时,文件将复制到其新目录,但会丢失其原始权限.

有没有办法复制文件,以便它不会丢失权限?

c# file-permissions copy file-copying

6
推荐指数
1
解决办法
4351
查看次数

如何在ant copy任务中保留exec文件

我使用Ant为Mac OS X创建了Java FX软件包.它创建包含两个文件的包 - 1. MyApplication.app 2. MyApplication.dmg

我希望将这两个文件复制到其他文件夹中,所以我在build.xml中编写了命令 -

<copy todir="my_new_folder">
   <fileset dir="old_folder\bundles"/>
</copy>
Run Code Online (Sandbox Code Playgroud)

它在"my_new_folder"处成功复制了两个文件.但是从"my_new_folder"运行.app并没有启动我的应用程序虽然它正在从"old_folder"正确启动.

在比较复制的应用程序时,我发现exec(Unix可执行文件)驻留在MacOS文件夹("显示包内容/内容/ MacOS")不保留,其类型在文档文件中发生了变化.

如何保存它对Unix可执行文件的类型,因为我只是执行简单的复制目录.

谢谢,Neelam Sharma

ant macos file-copying

6
推荐指数
1
解决办法
4660
查看次数

计算文件复制的剩余时间

我有一个应用程序,通过网络将大量文件复制到文件服务器(而不是Web).我试图显示剩余时间的一半估计.

我已经看了很多关于SO的文章,但问题得到了解决,我没有尝试过我真正想做的事情.我希望估计的剩余时间相对稳定IE不会在整个地方跳转,这取决于波动的传输速度.

所以我看到的第一个解决方案是计算传输速度,以每秒字节数为单位

double bytePerSec = totalBytesCopied / TimeTaken.TotalSeconds;
Run Code Online (Sandbox Code Playgroud)

然后将剩余的总字节除以传输速率.

double secRemain = (totalFileSizeToCopy - totalBytesCopied) / bytePerSec;
Run Code Online (Sandbox Code Playgroud)

我认为,一旦复制了几MB,剩余的时间会变得更加稳定(尽管期望它会改变.但事实并非如此,它的不稳定性和跳跃遍布整个地方.

然后我在SO上尝试了一个解决方案....

double secRemain = (TimeTaken.TotalSeconds / totalBytesCopied) * (totalFileSizeToCopy - totalBytesCopied);
Run Code Online (Sandbox Code Playgroud)

这是一个类似的计算,但希望它可能有所作为!

所以现在我有点想我需要从不同的角度来看待这个问题.IE使用平均值?使用某种倒数计时器并重置每隔一段时间的时间?只是寻找已经遇到过这个问题的人的意见或建议.

c# math file-copying

6
推荐指数
1
解决办法
5708
查看次数

Python shutil copyfile - 缺少最后几行

我经常错过我尝试使用shutil copyfile复制的文件的最后几个kb.

我做了一些研究,确实看到有人在这里询问类似的东西: python shutil复制函数缺少最后几行

但我正在使用copyfile,它似乎使用了with语句......

with open(src, 'rb') as fsrc:
    with open(dst, 'wb') as fdst:
        copyfileobj(fsrc, fdst)
Run Code Online (Sandbox Code Playgroud)

所以我很困惑,更多的用户没有这个问题,如果它确实是某种缓冲问题 - 我会认为它更为人所知.

我非常简单地调用copyfile,不要认为我可能做错了什么,基本上按照我认为的标准方式做:

copyfile(target_file_name,dest_file_name) 
Run Code Online (Sandbox Code Playgroud)

然而,我每次都错过了最后4kb左右的文件.

我还没有触及在shutil中调用的copyfile函数,它是...

def copyfileobj(fsrc, fdst, length=16*1024):
    """copy data from file-like object fsrc to file-like object fdst"""
    while 1:
        buf = fsrc.read(length)
        if not buf:
            break
        fdst.write(buf)
Run Code Online (Sandbox Code Playgroud)

所以我不知所措,但我想我即将学习关于冲洗,缓冲或使用声明的内容,或者......帮助!谢谢


对Anand:Anand,我避免提及那些东西bc我觉得这不是问题,但是因为你问...执行摘要是我从FTP获取文件,检查文件是否与上次不同我保存了一份副本,如果是这样,下载文件并保存副本.它是迂回的意大利面条代码,当我是一个真正纯粹的编程器的新功能时我写的.看起来像:

for filename in ftp.nlst(filematch):
    target_file_name = os.path.basename(filename)
    with open(target_file_name ,'wb') as fhandle:
    try:
        ftp.retrbinary('RETR %s' % filename, fhandle.write)
        the_files.append(target_file_name)
        mtime = modification_date(target_file_name)
        mtime_str_for_file = str(mtime)[0:10] + str(mtime)[11:13] + str(mtime)[14:16] …
Run Code Online (Sandbox Code Playgroud)

python shutil file-copying

6
推荐指数
1
解决办法
1218
查看次数