C++文件处理的几点操作

来源:互联网 发布:宁波房产最新成交数据 编辑:程序博客网 时间:2024/05/28 15:40

<span style="font-family: Arial, Helvetica, sans-serif;">由于整理图片需要用到一些简单的文件处理操作,将遇到的tips记录下来,以备后用:</span>

1、关于新建文件夹

char num_tmp[10];itoa(j,num_tmp,10);char *new_dir="F://gt_db//";string my_dest_dir=dest_dir+num_tmp+"//";char   char_dest_dir[50];strcpy(char_dest_dir,new_dir);    //字符串复制strcat(char_dest_dir,num_tmp);      //字符串连接if (_mkdir( char_dest_dir ) == 0)    //新建文件夹

利用上面程序可以循环新建文件夹 ,需要用到头文件  #include <direct.h>。如果此文件夹已存在,则不会在新建。上面程序中还含有简单的字符串操作。

2、关于在文件中续写:

<pre name="code" class="cpp">file.open("annotation.txt",ios::app);

上面这句话可以实现在文件中续写内容,不过这个文件事先建立好(我是这么做的),需要的时候直接打开就行。起作用的就是后面的ios::app。

3、保存图片:

Mat faceRGB=img(maxface);
imwrite(my_dest_dir+imgname,faceRGB);

第一句是从原图中截图去骗,maxface是cv::rect的变量,img为cv::mat的文件。

第一个参数为图片全路径名(包括位置和文件名),第二个参数为mat图片。

4、删除文件操作:

string deleteimg_str=my_src_dir+imgname;const char *deleteimg=deleteimg_str.c_str();if (DeleteFile(deleteimg)) printf("Removed %s.\n",deleteimg_str); else perror("remove");    return 0; 

开始用的是remove函数,提示无法删除;于是就用了DeleteFile函数,但是注意里面的参数为LPCSTR格式,我用的是const char*,在项目设置中设置字符集为未设置,默认是使用Unicode的,这个地方注意改一下,改为未设置。在Debug下可以用const char*作为DeleteFile的参数,但是在Release模式下需要用下面6点所说的LPCSTR格式的。

5、图片保存:

imwrite(my_dest_dir+"//"+imgname,img);

用imwrite保存图片,发现一个问题就是原图为18.9k,保存后新图30多k。而且如果原来保存的位置含有文件名相同的文件们,则会进行替换。


6、关于string到的LPCSTR转换:

string deleteimg_str=my_src_dir+imgname;const char *deleteimg=deleteimg_str.c_str();size_t size = deleteimg_str.length();wchar_t *buffer = new wchar_t[size+1];MultiByteToWideChar( CP_ACP, 0, deleteimg_str.c_str(), size, buffer, size * sizeof(wchar_t) );buffer[size] = 0;  // 确保以 '\0' 结尾 

buffer中就含有需要的LPCSTR格式内容,用完后记得delete buffer;

7、DeleteFile一直无法删除:

用GetLastError函数查看,Visual C++ 中,可以在监视窗口添加 $err,hr 一行来实时显示错误。发现错误代码是5,就是【5】-拒绝访问。所以修改文件夹属性。

8、不适用imwrite来幅值图片,同样适用于一般文件的复制:

_mkdir( char_dest_dir );string OldFileName=src_dir+imgname;string NewFileName=my_dest_dir+"//"+imgname;LPCTSTR lpOldFileName=OldFileName.c_str();LPCTSTR lpNewFileName=NewFileName.c_str();CopyFile(lpOldFileName, //pointer to name of an existing filelpNewFileName,      //pointer to filename to copy toTRUE          //flag for operation if file exists  设为TRUE表示目标文件存在的话就复制失败 );

使用的是Copyfile函数。

0 0
原创粉丝点击