如何在Python中复制文件?
我找不到任何东西os.
我正在考虑使用Docker在持续集成(CI)服务器上构建我的依赖项,这样我就不必在代理本身上安装所有运行时和库.为了实现这一点,我需要将容器内部构建的构建工件复制回主机.
那可能吗?
我想使用R将文件从一个文件夹复制/粘贴到Windows中的另一个文件夹,但它不起作用.我的代码:
> file.rename(from="C:/Users/msc2/Desktop/rabata.txt",to="C:/Users/msc2/Desktop/Halwa/BADMASHI/SCOP/rabata.tx")
[1] FALSE
Run Code Online (Sandbox Code Playgroud) 我用过这段代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
using System.IO;
namespace WindowsApplication1 {
public partial class Form1 : Form {
// Class to report progress
private class UIProgress {
public UIProgress(string name_, long bytes_, long maxbytes_) {
name = name_; bytes = bytes_; maxbytes = maxbytes_;
}
public string name;
public long bytes;
public long maxbytes;
}
// Class to report exception {
private class UIError {
public UIError(Exception ex, string path_) {
msg = ex.Message; path = path_; …Run Code Online (Sandbox Code Playgroud) 是否可以同时复制另一个进程正在使用的文件?
我问,因为当我尝试使用以下代码复制文件时,会引发异常:
System.IO.File.Copy(s, destFile, true);
Run Code Online (Sandbox Code Playgroud)
提出的例外是:
该进程无法访问文件'D:\ temp\1000000045.zip',因为它正由另一个进程使用.
我不想创建新文件,我只想复制或删除它.这可能吗?
我正在尝试自动将文件推送到我的用户的主目录中,但是我被困在"权限被拒绝"错误上 - 在这里使用CopyFile调用抛出第6行.
脚本的其他部分(未显示)使用相同的源和目标目录创建和复制文件夹内容,并且它们完美地工作.只有当我使用CopyFile失败时才会这样.
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists("H:\Minecraft\.minecraft\options.txt") Then
fso.CopyFile "C:\Minecraft\options.txt", "H:\Minecraft\.minecraft\"
End If
Set fso = Nothing
Run Code Online (Sandbox Code Playgroud)
H: 是一个网络主目录,当前用户具有完全读/写权限.
我尝试添加/删除路径中的尾部斜杠,添加"options.txt"到目标路径,删除false参数...不确定还有什么要尝试.有什么想法吗?
谢谢!
仅供参考,在上面容易出错的位之前,这段代码每次都会完美地执行:
If Not fso.FolderExists("H:\Minecraft\.minecraft\bin\") Then
If Not fso.FolderExists("H:\Minecraft\.minecraft\") Then
fso.CreateFolder("H:\Minecraft\.minecraft\")
End If
fso.GetFolder("C:\Minecraft\bin\").Copy "H:\Minecraft\.minecraft\"
End If
Run Code Online (Sandbox Code Playgroud) 我看到Java 8已经大大清理了将文件内容读入String:
String contents = new String(Files.readAllBytes(Paths.get(new URI(someUrl))));
Run Code Online (Sandbox Code Playgroud)
我想知道是否有类似的东西(更干净/更少的代码/更简洁)递归复制目录.在Java 7的土地上,它仍然是这样的:
public void copyFolder(File src, File dest) throws IOException{
if(src.isDirectory()){
if(!dest.exists()){
dest.mkdir();
}
String files[] = src.list();
for (String file : files) {
File srcFile = new File(src, file);
File destFile = new File(dest, file);
copyFolder(srcFile,destFile);
}
} else {
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest);
byte[] buffer = new byte[1024];
int length;
while ((length = in.read(buffer)) > 0){
out.write(buffer, 0, length);
}
in.close();
out.close();
}
} …Run Code Online (Sandbox Code Playgroud) 在QFile :: copy文档中,它说
如果名为newName的文件已存在,则copy()返回false(即,QFile不会覆盖它).
但即使目标存在,我也需要复制文件.Qt中有哪些可用的解决方法?
删除文件是显而易见的解决方案,但它会引发竞争条件......
基本情况:
我在openSuSE中复制一些NTFS磁盘.每个都是2TB.当我这样做时,系统运行缓慢.
我的猜测:
我相信这可能是由于缓存.Linux决定丢弃有用的缓存(例如kde4膨胀,虚拟机磁盘,LibreOffice二进制文件,Thunderbird二进制文件等),而是用复制磁盘中的东西填充所有可用内存(总共24 GB),这些内容只读一次,然后写,再也没用过.因此,每当我使用这些应用程序(或kde4)时,需要再次读取磁盘,并再次读取磁盘上的膨胀使得事情冻结/打嗝.
由于缓存消失以及这些膨胀的应用程序需要大量缓存的事实,这使得系统非常慢.
由于它是USB,磁盘和磁盘控制器不是瓶颈,因此使用ionice不会使它更快.
我相信这是缓存,而不仅仅是主板太慢,因为如果我停止一切复制,它仍会运行一段时间,直到它重新读取所有内容.如果我重新启动复制,它需要一分钟才能再次出现波动.但是,我可以将它限制在大约40 MB/s,并且它再次运行得更快(不是因为它具有正确的缓存,而是因为主板总线为系统磁盘提供了大量额外带宽).我可以完全接受主板的IO功能被完全消耗的性能损失(100%使用,意味着0%的浪费功率让我开心),但我不能接受这种缓存机制在这个特定用途中表现如此糟糕案件.
# free
total used free shared buffers cached
Mem: 24731556 24531876 199680 0 8834056 12998916
-/+ buffers/cache: 2698904 22032652
Swap: 4194300 24764 4169536
Run Code Online (Sandbox Code Playgroud)
我也在Ubuntu上做了同样的事情,这导致整个系统挂起.;)
为了澄清,我不是要求如何为"系统"留出内存,而是为了"缓存".我知道缓存内存会在需要时自动返回给系统,但我的问题是它不会保留用于缓存特定的东西.
题:
有没有办法告诉这些复制操作限制内存使用,所以一些重要的事情仍然被缓存,因此任何减速是由于正常的磁盘使用而不重读相同的常用文件?例如,是否允许将每个进程/用户/文件系统的最大内存设置用作缓存/缓冲区?
我将使用我的winforms应用程序通过网络复制一个大文件,我需要显示某种进度条.我没有做自己的复制程序,而是认为简单地显示内置文件复制对话框可能会更好.
我还需要一个"复制完成"和"复制失败"通知.
我需要这个在Windows XP,Vista和7上工作.有没有办法打电话来从我的c#代码中使用这个功能?