标签: file-copying

如何在C#(windows app)中将文件从本地系统复制到其他系统?

我需要从我的Windows C#应用程序加载帮助文件并移动/复制到其他系统(到其本地驱动器).本地系统上的应用程序(相同的C#windows应用程序)将使用它来提供帮助.

要做到这一点需要做些什么?

我理解,File.Copy()但我不知道,它是否也适用于远程系统?

c# file-copying

8
推荐指数
1
解决办法
3万
查看次数

在安装时将文件从安装位置复制到wix中的另一个位置

我创建了一个msi安装文件,其中包含一些"Sample"文件夹中的文件,应该将其复制到临时文件夹中.有人建议怎么做?

windows-installer wix file-copying

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

Delphi:CopyFileEx和Thread

我内部有一个线程和一个Progress Routine(一个函数)(在我的线程类中).

我尝试在线程内执行此操作:

CopyFileEx(pchar(ListToCopy.Strings[Loop]),pchar(TN+ExtractFileName(ListToCopy.Strings[Loop])), @ProgressRoutine, nil, nil, 0);
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误:"需要变量"(错误在于:@ProgressRoutine).如果要在线程外部使函数ProgressRoutine,那么一切都将正常.

如何在线程内使用该函数?

谢谢.

delphi multithreading file-copying

8
推荐指数
1
解决办法
1651
查看次数

FileChannel.transferTo用于Windows中的大文件

使用Java NIO使用可以更快地复制文件.我发现两种方法主要是通过互联网来完成这项工作.

public static void copyFile(File sourceFile, File destinationFile) throws IOException {
    if (!destinationFile.exists()) {
        destinationFile.createNewFile();
    }

    FileChannel source = null;
    FileChannel destination = null;
    try {
        source = new FileInputStream(sourceFile).getChannel();
        destination = new FileOutputStream(destinationFile).getChannel();
        destination.transferFrom(source, 0, source.size());
    } finally {
        if (source != null) {
            source.close();
        }
        if (destination != null) {
            destination.close();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

20个非常有用的Java开发人员Java代码片段中,我发现了一个不同的评论和技巧:

public static void fileCopy(File in, File out) throws IOException {
    FileChannel inChannel = new FileInputStream(in).getChannel();
    FileChannel outChannel = new FileOutputStream(out).getChannel(); …
Run Code Online (Sandbox Code Playgroud)

java nio file-copying

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

Parallel.ForEach中的File.Copy

我正在尝试创建一个目录并在一个文件中复制一个文件(pdf)Parallel.ForEach.

下面是一个简单的例子:

    private static void CreateFolderAndCopyFile(int index)
    {
        const string sourcePdfPath = "c:\\testdata\\test.pdf";
        const string rootPath = "c:\\testdata";

        string folderDirName = string.Format("Data{0}", string.Format("{0:00000000}", index));

        string folderDirPath = rootPath + @"\" + folderDirName;

        Directory.CreateDirectory(folderDirPath);

        string desPdfPath = folderDirPath + @"\" + "test.pdf";

        File.Copy(sourcePdfPath, desPdfPath, true);

    }
Run Code Online (Sandbox Code Playgroud)

上述方法创建一个新文件夹并将pdf文件复制到新文件夹.它创建了这个目录树:

TESTDATA
  -Data00000000
      -test.pdf
  -Data00000001
      -test.pdf
....
  -Data0000000N
      -test.pdf
Run Code Online (Sandbox Code Playgroud)

我试着CreateFolderAndCopyFileParallel.ForEach循环中调用该方法.

    private static void Func<T>(IEnumerable<T> docs)
    {
        int index = 0;
        Parallel.ForEach(docs, doc =>
                                   {
                                       CreateFolderAndCopyFile(index);
                                       index++;
                                   });
    }
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,它完成以下错误: …

c# parallel-processing file-copying

8
推荐指数
2
解决办法
7238
查看次数

在批处理副本脚本中排除文件夹

我在USB记忆棒上使用批处理文件来备份我的照片.我使用以下命令:

for /r C:\ %%x in (*.jpg *.png *.gif) do @copy /y %%x .
Run Code Online (Sandbox Code Playgroud)

我想排除邮件文件夹WINDOWS和PROGRAM FILES中的文件.

有谁知道如何使用批处理文件执行此操作?

batch-file file-copying

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

如何复制/替换DLL?

我有一个实用程序,通过简单地复制/替换可执行文件来更新应用程序.现在,我有一些需要更新的DLL文件.但是,有时Windows不会让我替换它,因为有些东西正在使用它,有时使用DLL有很多东西,我无法保证它将被解锁为我替换它.

目前,我唯一的解决方法是首先重命名现有的DLL,然后我可以复制新的DLL.但是旧的DLL会因更改的文件名而落后.

在这种情况下如何以编程方式替换DLL?

delphi dll access-denied file-copying delphi-xe2

8
推荐指数
1
解决办法
1158
查看次数

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
查看次数

为什么我无法将我的文件复制到 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
查看次数