#include<iostream>
#include<io.h>
using namespace std;
void main()
{
string newname = "image_disciple_";
//ar newname[30] = "image_disciple_";
int num = 1099;
//string lujing = "C:\\Users\\carol\\Documents\\Tencent Files\\189654842\\FileRecv\\test\\";
_finddata_t file;
long lf;
if((lf = _findfirst("C:\\Users\\carol\\Documents\\Tencent Files\\189654842\\FileRecv\\调整尺寸PNG\\*.*", &file))==-1l)//_findfirst返回的是long型; long __cdecl _findfirst(const char *, struct _finddata_t *)
cout<<"文件没有找到!\n";
else
{
cout<<"\n文件列表:\n";
while( _findnext( lf, &file ) == 0 )//int __cdecl _findnext(long, struct _finddata_t *);如果找到下个文件的名字成功的话就返回0,否则返回-1
{
char cnum[4] = "";
cout<<file.name<< " ";
++num;
itoa(num,cnum,10);
newname += cnum;
newname += ".png";
int c = rename(file.name,newname.c_str());//这里貌似一直失败,为什么啊?是函数用法不对吗?
if (c==0)
cout<<"succeed!";
cout<<newname.c_str();
newname = "image_disciple_";
cout<<endl;
}
}
_findclose(lf);
system("pause");
}
17 个解决方案
#2
//这里换成一个char NewfileName[];
//用strcpy函数拷贝试试
newname += cnum;
newname += ".png";
int c = rename(file.name,newname.c_str());
//rename函数调用换下
int c = rename(file.name,NewfileName);
if (c != 0)
printf("rename failed!\n");
这样试试先,看能不能解决,
#3
什么叫貌似失败? 如果失败, GetLastError(); 看看错误码
也许需要一个绝对路径。。。
std::string prefix("C:\\Users\\carol\\Documents\\Tencent Files\\189654842\\FileRecv\\调整尺寸PNG\\");
std::string oldname(prefix);
oldname += file.name;
std::string newname(prefix);
newname += "image_disciple_";
newname += cnum;
newname += ".png";
也许需要一个绝对路径。。。
std::string prefix("C:\\Users\\carol\\Documents\\Tencent Files\\189654842\\FileRecv\\调整尺寸PNG\\");
std::string oldname(prefix);
oldname += file.name;
std::string newname(prefix);
newname += "image_disciple_";
newname += cnum;
newname += ".png";
#4
我这个自己写的简单用用,你那里边看着太复杂了
#5
上面补充一点 都需要绝对路径的
if (c != 0)
printf("rename failed c =%d!\n", c);
看看错误返回多少
这个 有错误码说明:
http://msdn.microsoft.com/zh-cn/magazine/608h8bda(VS.90).aspx
#6
我改成绝对路径也试过,还是没用
#7
就是一直失败
#8
GetLastError()的返回值是什么?
#9
上面我的代码可能也有问题。。 同个目录下怕会死循环
#10
你这个是vb的函数,不是这个函数,我用的是c语言的rename,返回值只有0和-1,0则成功,-1则失败
#11
你这个好像也是vb,我那个不是vb啊
#12
//这里换成一个char NewfileName[];
//用strcpy函数拷贝试试
newname += cnum;
newname += ".png";
int c = rename(file.name,newname.c_str());
//rename函数调用换下
int c = rename(file.name,NewfileName);
if (c != 0)
printf("rename failed!\n");
这样试试先,看能不能解决,
#13
我改成绝对路径也试过,还是没用
GetLastError()的返回值是什么?
你这个好像也是vb,我那个不是vb啊
你用的是C语言,平台是windows,
GetLastError() 在 "windows.h"里面
也是C接口啊...
if (c != 0)
int err_code = GetLastError();
然后,网上搜下这个错误码 (VS工具里的Lookup也可以)
#14
我改成绝对路径也试过,还是没用
GetLastError()的返回值是什么?
你这个好像也是vb,我那个不是vb啊
你用的是C语言,平台是windows,
GetLastError() 在 "windows.h"里面
也是C接口啊...
if (c != 0)
int err_code = GetLastError();
然后,网上搜下这个错误码 (VS工具里的Lookup也可以)
#15
终于搞定了!多谢大家的帮助,最后总结一下,貌似先获取文件夹下所有文件再一个个rename的话,就要加绝对路径,但是单个文件的话,跟cpp文件在同一目录下好像就可以,可我还是觉得这两种情况应该都可以不用绝对路径(虽然这么做运行结果不对)。代码贴出来,大家看看吧,有什么不足的地方希望大家多多指出,多提提意见!
#include<iostream>
#include<io.h>
#include<cstdlib>
#include<string>
using namespace std;
int main()
{
string newname = "C:\\Users\\LYH\\Desktop\\rename\\rename\\test\\image_disciple_";
int num = 1099;
_finddata_t file;
long lf;
if((lf = _findfirst("C:\\Users\\LYH\\Desktop\\rename\\rename\\test\\*.*", &file))==-1l)//_findfirst返回的是long型; long __cdecl _findfirst(const char *, struct _finddata_t *)
cout<<"文件没有找到!\n";
else
{
_findnext( lf, &file );
cout<<"\n文件列表:\n";
while( _findnext( lf, &file ) == 0 )//int __cdecl _findnext(long, struct _finddata_t *);如果找到下个文件的名字成功的话就返回0,否则返回-1
{
//char newname[] = "image_disciple_";
char cnum[5] = "";
cout<<file.name<< " ";
++num;
_itoa(num,cnum,10);
newname += cnum;
newname += ".png";
string oldname = file.name;
oldname = "C:\\Users\\LYH\\Desktop\\rename\\rename\\test\\" + oldname;
int c = rename(oldname.c_str(),newname.c_str());
cout<<newname.c_str()<<" ";
if ( c == 0 )
puts ( "File successfully renamed" );
else
perror( "Error renaming file" );
newname = "image_disciple_";
cout<<endl;
}
}
_findclose(lf);
system("pause");
return 0;
}
#16
#17
原来是这样。
终于搞定了!多谢大家的帮助,最后总结一下,貌似先获取文件夹下所有文件再一个个rename的话,就要加绝对路径,但是单个文件的话,跟cpp文件在同一目录下好像就可以,可我还是觉得这两种情况应该都可以不用绝对路径(虽然这么做运行结果不对)。代码贴出来,大家看看吧,有什么不足的地方希望大家多多指出,多提提意见!#include<iostream>
#include<io.h>
#include<cstdlib>
#include<string>
using namespace std;
int main()
{
string newname = "C:\\Users\\LYH\\Desktop\\rename\\rename\\test\\image_disciple_";
int num = 1099;
_finddata_t file;
long lf;
if((lf = _findfirst("C:\\Users\\LYH\\Desktop\\rename\\rename\\test\\*.*", &file))==-1l)//_findfirst返回的是long型; long __cdecl _findfirst(const char *, struct _finddata_t *)
cout<<"文件没有找到!\n";
else
{
_findnext( lf, &file );
cout<<"\n文件列表:\n";
while( _findnext( lf, &file ) == 0 )//int __cdecl _findnext(long, struct _finddata_t *);如果找到下个文件的名字成功的话就返回0,否则返回-1
{
//char newname[] = "image_disciple_";
char cnum[5] = "";
cout<<file.name<< " ";
++num;
_itoa(num,cnum,10);
newname += cnum;
newname += ".png";
string oldname = file.name;
oldname = "C:\\Users\\LYH\\Desktop\\rename\\rename\\test\\" + oldname;
int c = rename(oldname.c_str(),newname.c_str());
cout<<newname.c_str()<<" ";
if ( c == 0 )
puts ( "File successfully renamed" );
else
perror( "Error renaming file" );
newname = "image_disciple_";
cout<<endl;
}
}
_findclose(lf);
system("pause");
return 0;
}
原来是这样。
#1
#2
//这里换成一个char NewfileName[];
//用strcpy函数拷贝试试
newname += cnum;
newname += ".png";
int c = rename(file.name,newname.c_str());
//rename函数调用换下
int c = rename(file.name,NewfileName);
if (c != 0)
printf("rename failed!\n");
这样试试先,看能不能解决,
#3
什么叫貌似失败? 如果失败, GetLastError(); 看看错误码
也许需要一个绝对路径。。。
std::string prefix("C:\\Users\\carol\\Documents\\Tencent Files\\189654842\\FileRecv\\调整尺寸PNG\\");
std::string oldname(prefix);
oldname += file.name;
std::string newname(prefix);
newname += "image_disciple_";
newname += cnum;
newname += ".png";
也许需要一个绝对路径。。。
std::string prefix("C:\\Users\\carol\\Documents\\Tencent Files\\189654842\\FileRecv\\调整尺寸PNG\\");
std::string oldname(prefix);
oldname += file.name;
std::string newname(prefix);
newname += "image_disciple_";
newname += cnum;
newname += ".png";
#4
我用着这个不错,不知道楼主用的什么工具。
http://www.boost.org/doc/libs/1_54_0/libs/filesystem/doc/reference.html
#5
//这里换成一个char NewfileName[];
//用strcpy函数拷贝试试
newname += cnum;
newname += ".png";
int c = rename(file.name,newname.c_str());
//rename函数调用换下
int c = rename(file.name,NewfileName);
if (c != 0)
printf("rename failed!\n");
这样试试先,看能不能解决,
上面补充一点 都需要绝对路径的
if (c != 0)
printf("rename failed c =%d!\n", c);
看看错误返回多少
这个 有错误码说明:
http://msdn.microsoft.com/zh-cn/magazine/608h8bda(VS.90).aspx
#6
什么叫貌似失败? 如果失败, GetLastError(); 看看错误码
也许需要一个绝对路径。。。
std::string prefix("C:\\Users\\carol\\Documents\\Tencent Files\\189654842\\FileRecv\\调整尺寸PNG\\");
std::string oldname(prefix);
oldname += file.name;
std::string newname(prefix);
newname += "image_disciple_";
newname += cnum;
newname += ".png";
#7
什么叫貌似失败? 如果失败, GetLastError(); 看看错误码
也许需要一个绝对路径。。。
std::string prefix("C:\\Users\\carol\\Documents\\Tencent Files\\189654842\\FileRecv\\调整尺寸PNG\\");
std::string oldname(prefix);
oldname += file.name;
std::string newname(prefix);
newname += "image_disciple_";
newname += cnum;
newname += ".png";
#8
我改成绝对路径也试过,还是没用
GetLastError()的返回值是什么?
#9
上面我的代码可能也有问题。。 同个目录下怕会死循环
#10
这个 有错误码说明:
http://msdn.microsoft.com/zh-cn/magazine/608h8bda(VS.90).aspx
你这个是vb的函数,不是这个函数,我用的是c语言的rename,返回值只有0和-1,0则成功,-1则失败
#11
我改成绝对路径也试过,还是没用
GetLastError()的返回值是什么?
你这个好像也是vb,我那个不是vb啊
#12
//这里换成一个char NewfileName[];
//用strcpy函数拷贝试试
newname += cnum;
newname += ".png";
int c = rename(file.name,newname.c_str());
//rename函数调用换下
int c = rename(file.name,NewfileName);
if (c != 0)
printf("rename failed!\n");
这样试试先,看能不能解决,
#13
我改成绝对路径也试过,还是没用
GetLastError()的返回值是什么?
你这个好像也是vb,我那个不是vb啊
你用的是C语言,平台是windows,
GetLastError() 在 "windows.h"里面
也是C接口啊...
if (c != 0)
int err_code = GetLastError();
然后,网上搜下这个错误码 (VS工具里的Lookup也可以)
#14
我改成绝对路径也试过,还是没用
GetLastError()的返回值是什么?
你这个好像也是vb,我那个不是vb啊
你用的是C语言,平台是windows,
GetLastError() 在 "windows.h"里面
也是C接口啊...
if (c != 0)
int err_code = GetLastError();
然后,网上搜下这个错误码 (VS工具里的Lookup也可以)
#15
终于搞定了!多谢大家的帮助,最后总结一下,貌似先获取文件夹下所有文件再一个个rename的话,就要加绝对路径,但是单个文件的话,跟cpp文件在同一目录下好像就可以,可我还是觉得这两种情况应该都可以不用绝对路径(虽然这么做运行结果不对)。代码贴出来,大家看看吧,有什么不足的地方希望大家多多指出,多提提意见!
#include<iostream>
#include<io.h>
#include<cstdlib>
#include<string>
using namespace std;
int main()
{
string newname = "C:\\Users\\LYH\\Desktop\\rename\\rename\\test\\image_disciple_";
int num = 1099;
_finddata_t file;
long lf;
if((lf = _findfirst("C:\\Users\\LYH\\Desktop\\rename\\rename\\test\\*.*", &file))==-1l)//_findfirst返回的是long型; long __cdecl _findfirst(const char *, struct _finddata_t *)
cout<<"文件没有找到!\n";
else
{
_findnext( lf, &file );
cout<<"\n文件列表:\n";
while( _findnext( lf, &file ) == 0 )//int __cdecl _findnext(long, struct _finddata_t *);如果找到下个文件的名字成功的话就返回0,否则返回-1
{
//char newname[] = "image_disciple_";
char cnum[5] = "";
cout<<file.name<< " ";
++num;
_itoa(num,cnum,10);
newname += cnum;
newname += ".png";
string oldname = file.name;
oldname = "C:\\Users\\LYH\\Desktop\\rename\\rename\\test\\" + oldname;
int c = rename(oldname.c_str(),newname.c_str());
cout<<newname.c_str()<<" ";
if ( c == 0 )
puts ( "File successfully renamed" );
else
perror( "Error renaming file" );
newname = "image_disciple_";
cout<<endl;
}
}
_findclose(lf);
system("pause");
return 0;
}
#16
#17
原来是这样。
终于搞定了!多谢大家的帮助,最后总结一下,貌似先获取文件夹下所有文件再一个个rename的话,就要加绝对路径,但是单个文件的话,跟cpp文件在同一目录下好像就可以,可我还是觉得这两种情况应该都可以不用绝对路径(虽然这么做运行结果不对)。代码贴出来,大家看看吧,有什么不足的地方希望大家多多指出,多提提意见!#include<iostream>
#include<io.h>
#include<cstdlib>
#include<string>
using namespace std;
int main()
{
string newname = "C:\\Users\\LYH\\Desktop\\rename\\rename\\test\\image_disciple_";
int num = 1099;
_finddata_t file;
long lf;
if((lf = _findfirst("C:\\Users\\LYH\\Desktop\\rename\\rename\\test\\*.*", &file))==-1l)//_findfirst返回的是long型; long __cdecl _findfirst(const char *, struct _finddata_t *)
cout<<"文件没有找到!\n";
else
{
_findnext( lf, &file );
cout<<"\n文件列表:\n";
while( _findnext( lf, &file ) == 0 )//int __cdecl _findnext(long, struct _finddata_t *);如果找到下个文件的名字成功的话就返回0,否则返回-1
{
//char newname[] = "image_disciple_";
char cnum[5] = "";
cout<<file.name<< " ";
++num;
_itoa(num,cnum,10);
newname += cnum;
newname += ".png";
string oldname = file.name;
oldname = "C:\\Users\\LYH\\Desktop\\rename\\rename\\test\\" + oldname;
int c = rename(oldname.c_str(),newname.c_str());
cout<<newname.c_str()<<" ";
if ( c == 0 )
puts ( "File successfully renamed" );
else
perror( "Error renaming file" );
newname = "image_disciple_";
cout<<endl;
}
}
_findclose(lf);
system("pause");
return 0;
}
原来是这样。