我要的效果很简单,这样吧,先把代码上了再提问题吧#include <iostream>#ifndef Test_H
#define Test_Husing namespace std;class Test {
public:
// 构造函数与析构函数~
Test();
Test(char *characters);
~Test();
int fileCopy(char *pathFrom, char *pathTo);
public:
// 数据成员
char m_data[50];
static const int onlyThisType = 3;
};
#endifTest::Test() {
cout << "Test 无参构造函数被调用~" << endl;
}Test::Test(char *characters) {
cout << "Test 带参构造函数被调用~" << endl;
m_data = characters;
}Test::~Test() {
cout << "Test 析构函数被调用~" << endl;
}// 文件复制,将1个文件中所有内容复制到另一个文件中去,如果目标文件不存在返回 0 表示复制失败(则创建出来)~
// 这个方法有问题啊,高手们帮看一下
int Test::fileCopy(char *pathFrom, char *pathTo) {
FILE *pFileFrom;
FILE *pFileTo;
// 如果打开文件失败的话,fopen 函数将返回 NULL,NULL是1个宏,实际值为 0~
if(pFileFrom = fopen(pathFrom, "rt")) {
return 0;
}
if(pFileTo = fopen(pathTo, "at")) {
return 0;
}
// feof() 检测是否已到文件尾,是返回真,否则返回 0
char tempBuffer[2048];
do {
fgets(tempBuffer, 1024, pFileFrom);
fputs(tempBuffer, pFileTo);
} while(!feof(pFileFrom)); fclose(pFileFrom);
fclose(pFileTo);
return 1;
}int main() {
// 错误 1 error C2440: “=”: 无法从“char *”转换为“char [50]”
Test t("asdfasdfasf"); char baseStr[200] = "F:\\Project Related\\MyProjects(VC++ 2005)\\FreeStyle20100530\\FreeStyle20100530\\";
char sourceStr[] = strcat(baseStr, "source.txt");
char destinationStr[] = strcat(baseStr, "destination.txt"); // 我的想法很简单,前面路径的部分都是一样的,抽出来,然后再和文件名拼起来就行了~
// 但是却不行啊,我又想用string 类型,但是不知道怎么用的
// 还有我用指针接收,竟然两个都成
// F:\\Project Related\\MyProjects(VC++ 2005)\\FreeStyle20100530\\FreeStyle20100530\\source.txtdestination.txt
// 这个了 // 没办法,只有用这种原始的方法来写了,真别扭~
char from[200] = "F:\\Project Related\\MyProjects(VC++ 2005)\\FreeStyle20100530\\FreeStyle20100530\\from.txt";
char to[200] = "F:\\Project Related\\MyProjects(VC++ 2005)\\FreeStyle20100530\\FreeStyle20100530\\to.txt"; // 高手能说说么,怎么用字符串拼凑的那种方式??
t.fileCopy(from, to);
return 0;
}
我的问题就在“文件复制”和“构造传参”那块高手能帮看、改下代码么,拜谢!!

解决方案 »

  1.   

    控制台程序,文件复制,是什么文件,是txt吗?
      

  2.   


    Test::Test(char *characters) {
        cout << "Test 带参构造函数被调用~" << endl;
        strcpy(m_data, characters);
    }char baseStr[200] = "F:\\Project Related\\MyProjects(VC++ 2005)\\FreeStyle20100530\\FreeStyle20100530\\";
        char sourceStr[MAX_PATH];
        char destinationStr[MAX_PATH];
        sprintf(sourceStr, "%s%s", baseStr, "source.txt");
        sprintf(sourceStr, "%s%s", baseStr, "dst.txt");
    对字符串的操作再看看书,你获取的字符串一样是因为两个指针都指向了baseStr
      

  3.   

    MAXPATH是怎么声明的啊?应该声明多长呢?
    而且我用的是VS2005,据说里面用的是Unicode字符集,不会一个数字、英文字符都占用2个字节把??
    期待回复!
      

  4.   


    char baseStr[] = "……";char sourceStr[MAX_PATH + 1] = {0}
    strcpy(sourceStr, baseStr);
    strcat(sourceStr, "source.txt");char destinationStr[MAX_PATH + 1] = {0};
    strcpy(destinationStr, baseStr);
    strcat(destinationStr, "destination.tx");
      

  5.   

    MAX_PATH是自己去定义的一个宏么,还是平台自己就已经给了个初始值了?
    另外有点儿看不懂啊
    char sourceStr[MAX_PATH + 1] = {0} 这样定义有什么好处呢?
    我觉得上面那位兄台的貌似显得更加简洁啊?求解
      

  6.   

    MAX_PATH是windef.h定义的宏
    #define MAX_PATH          260char sourceStr[MAX_PATH + 1] = {0} 这样定义有什么好处呢?
    -------------------------
    初始化操作
      

  7.   

    那就简单了,有现成的c++标准库函数可用。头文件 #include <fstream>;数据类型:ifstream(输入文件流) ofstream(输出文件流)。(应该是结构体或者是类。)具体用法你可以查查。或者你想自己实现一个这样的功能,也可以把他们作为一个很好的参照来使用。
      

  8.   

    这个还要 
    #include <windef.h>么,但是我创建的就是一个简单的控制台应用程序啊?
    既然那样的话,为何不直接定义这么一个宏呢?
    因为我确实再用不到里面的其他内容了啊?
    期待高手回复!