7

我已经用谷歌搜索了这个,但我仍然对如何使用它感到困惑。我正在制作文件管理器,我希望能够将文件复制并粘贴到新目录中。我知道要复制我需要使用file.copy(),但我不确定如何将它实现到我的代码中。

我想使用 fstream 来做到这一点。

4

6 回答 6

7

如果您使用的是 Win32 API,请考虑查看函数CopyFileCopyFileEx.

您可以通过类似于以下方式使用第一个:

CopyFile( szFilePath.c_str(), szCopyPath.c_str(), FALSE );

这会将在 的内容中找到的文件复制szFilePath到 的内容,如果复制不成功szCopyPath,将返回。FALSE要了解有关函数失败原因的更多信息,您可以使用该GetLastError()函数,然后在 Microsoft 文档中查找错误代码。

于 2013-07-29T16:57:38.070 回答
4
void copyFile(const std::string &from, const std::string &to)
{
    std::ifstream is(from, ios::in | ios::binary);
    std::ofstream os(to, ios::out | ios::binary);

    std::copy(std::istream_iterator(is), std::istream_iterator(),
          std::ostream_iterator(os));
}
于 2013-07-29T16:57:21.353 回答
2

这是我复制文件的实现,您应该看看 boost 文件系统,因为该库将成为标准 c++ 库的一部分。

#include <fstream>
#include <memory>

//C++98 implementation, this function returns true if the copy was successful, false otherwise.

bool copy_file(const char* From, const char* To, std::size_t MaxBufferSize = 1048576)
{
    std::ifstream is(From, std::ios_base::binary);
    std::ofstream os(To, std::ios_base::binary);

    std::pair<char*,std::ptrdiff_t> buffer;
    buffer = std::get_temporary_buffer<char>(MaxBufferSize);

    //Note that exception() == 0 in both file streams,
    //so you will not have a memory leak in case of fail.
    while(is.good() and os)
    {
       is.read(buffer.first, buffer.second);
       os.write(buffer.first, is.gcount());
    }

    std::return_temporary_buffer(buffer.first);

    if(os.fail()) return false;
    if(is.eof()) return true;
    return false;
}

#include <iostream>

int main()
{
   bool CopyResult = copy_file("test.in","test.out");

   std::boolalpha(std::cout);
   std::cout << "Could it copy the file? " << CopyResult << '\n';
}

Nisarg 的答案看起来不错,但该解决方案很慢。

于 2013-07-29T18:07:08.370 回答
1

http://msdn.microsoft.com/en-us/library/windows/desktop/aa363851(v=vs.85).aspx

我不知道您所说的复制和粘贴文件是什么意思;这是没有意义的。您可以将文件复制到另一个位置,我认为这就是您要问的。

于 2013-07-29T16:57:06.203 回答
0

在本机 C++ 中,您可以使用:

于 2013-07-29T16:55:52.263 回答
-2

System::IO::File::Copy("旧路径", "新路径");

于 2014-04-19T05:41:10.337 回答