C++ Boost rename()函数不使用';行不通

C++ Boost rename()函数不使用';行不通,c++,boost,g++,codeblocks,C++,Boost,G++,Codeblocks,编译器在编译时没有抱怨,我的程序说它工作了,并创建了文件夹,但文件没有移动。我做错了什么 #include <iostream> #include <boost/filesystem.hpp> using namespace std; using namespace boost::filesystem; char c = 'c'; bool move(){ if ((bool) rename("C:\\fldr1" "rawr.txt", "C:\\fldr2"

编译器在编译时没有抱怨,我的程序说它工作了,并创建了文件夹,但文件没有移动。我做错了什么

#include <iostream>
#include <boost/filesystem.hpp>

using namespace std;
using namespace boost::filesystem;

char c = 'c';

bool move(){

 if ((bool) rename("C:\\fldr1" "rawr.txt", "C:\\fldr2" "rared.txt") == (true)){
    return true;
 }
 else{
    return false;
 }

}
int main(int argc, char argv[])
{

    if (argv[1] = (c))
    {
        if (is_directory("C:\\fldr2")){

            if (move){
            cout << "Done 1!" << endl;
            }
        }
        else{
            cout << "Dir doesn't exist!" << endl;

            if ((bool)create_directory("C:\\fldr2") == (true)){

                if (move){
                    cout << "Done 2!" << endl;
                }
            }
        }
    }
    return 0;
}
#包括
#包括
使用名称空间std;
使用名称空间boost::filesystem;
字符c='c';
布尔移动{
如果((bool)重命名(“C:\\fldr1”“rawr.txt”“C:\\fldr2”“rared.txt”)==(true)){
返回true;
}
否则{
返回false;
}
}
int main(int argc,char argv[]
{
如果(argv[1]=(c))
{
如果(是目录(“C:\\fldr2”)){
如果(移动){
我想你是说

if (move()){
而不是

if (move){
第二种情况测试
move
函数是否存在,即其指针不为NULL(始终为true),第一种情况测试移动是否成功

 if (move)
在这里,您正在测试函数指针是否不为空-您需要实际调用函数。请重试

if(move())
  • 避免c样式转换有助于避免许多问题,如意外执行
    if(void)
  • 字符串的隐式连接
    “C:\\fldr1”“rawr.txt”==“C:\\fldr1rawr.txt”
    也可能产生不需要的结果
  • Boost rename可能引发您也无法处理的异常
  • 依靠文本字符串的隐式转换来提升路径是一个较小的问题
您可以执行以下操作:

bool move()
{
  path src("C:\\fldr1\\rawr.txt");
  path dest("C:\\fldr2\\rared.txt");

  try {
    rename(src, dest);
  }
  catch (...)
  {
    return false;
  }

  return exists(dest);
}

你真的在铸造“返回值”吗关于
void
-将函数返回到
bool
并检查它们?是否编译?@larsmans它编译了,但函数调用不正确或其他一些事情您知道这样做不会得到有意义的值,是吗?@larsmans I不会?这是因为重命名函数不打算返回布尔值吗?它是这样做的根本不返回值。文件仍然没有移动,是我调用rename()函数的方式有问题吗?它可以工作,但我必须对它进行一些更改,以便它可以编译。我将“path dest”(“C:\\fldr2\\rared.txt”);”复制到“return exists(dest);”行之前的右侧谢谢!@RunningDroid:考虑到调用
rename
需要
dest
,这没有多大意义。@ildjarn:我更改了它,因为如果我尝试按原样编译它,编译器会给我“错误:'dest'未在此范围内声明”(这可能是另一个问题)@RunningDroid:AJG85显示的代码不会出现这种情况。:-]@ildjarn那么我想我得想办法把小精灵从我的电脑里弄出来:)