LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1097|回复: 7

怎样高效得产生唯一的文件名?

[复制链接]
发表于 2007-3-15 17:38:21 | 显示全部楼层 |阅读模式
最近写个程序要把从摄像头得到的图片存到sd卡上(时间间隔0.5s)..所以需要
给每个图片文件起唯一的名子.
我现在用的方法大致如下:
#define PATH "/usr/sdcard/"
int save_jpeg(unsigned char *src, int jpegsize)
/*src指向的地址中存放着jpegsize大小的图像数据*/
{       

        FILE *fp;

        int i,j;

        time_t timep;

        char filename2[FILE_NAME_LENGTH];

        char filename3[FILE_NAME_LENGTH];

        char filepath[60]=PATH;

        char filepath_backup[60];

        char fileapp[]=".jpg";

        char filenumtable[9]="123456789";

        char filenum[3]="_0";

        time (&timep);       

        bzero(filename3,FILE_NAME_LENGTH);

        strcpy(filename2,ctime(&timep)); //filename2数组中存入了当前的时间字符串       

        /* 下面循环的作用是去掉filename2中的空格之类的字符,存入filename3中 */
        j=0;

        for(i=0;i<FILE_NAME_LENGTH;i++)

        {

                if((filename2!=' ')&&(filename2!=':')&&(filename2!='\n'))

                {

                        filename3[j]=filename2;

                        j++;

                }

                else if((filename2==' ')&&(filename3[j-1]!='_'))

                {

                        filename3[j]='_';

                        j++;

                }               

        }       

        strcat(filepath,filename3);       

        memcpy(filepath_backup,filepath,60);

        /* 区分同一秒内生成的文件名 */
        for(i=0;i<10;i++)

        {               

                filenum[1]=filenumtable;

                strcat(filepath,filenum);

                strcat(filepath,fileapp);
                if((fp=fopen(filepath, "r"))==NULL)
                {

                        fp=fopen(filepath, "w");

                        break;
                }
                fclose(fp);

                memcpy(filepath,filepath_backup,60);       

        }

       

       
fwrite(ptframe, jpegsize, 1, fp);

        fclose(fp);

       

        return(1);       

}
我感觉我的方法不太科学,请问大家有没有什么聪明的办法啊!
发表于 2007-3-15 21:51:27 | 显示全部楼层
我记得不是有相应函数么?
回复 支持 反对

使用道具 举报

发表于 2007-3-16 10:48:50 | 显示全部楼层
日期时间+[同一秒钟内的第几张] 作为文件名不是更科学吗?
回复 支持 反对

使用道具 举报

发表于 2007-3-16 11:27:24 | 显示全部楼层
tmpnam()
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-21 11:25:30 | 显示全部楼层
tmpnam() 能反应出文件产生的时间吗,我的目的是让产生的文件名能反应出当时的时间,即最好是这样的:2007-0321-1118-36-1.jpg.
  给的提示太简单了,我实在是无从下手,毕竟水平有限.所以,肯请高手给出大概的一个思路或代码,不胜感激.
回复 支持 反对

使用道具 举报

发表于 2007-3-22 09:36:19 | 显示全部楼层
Post by leeway
tmpnam() 能反应出文件产生的时间吗,我的目的是让产生的文件名能反应出当时的时间,即最好是这样的:2007-0321-1118-36-1.jpg.
给的提示太简单了,我实在是无从下手,毕竟水平有限.所以,肯请高手给出大概的一个思路或代码,不胜感激.

再重复一下kingway的话。
[color="Red"]日期时间+[同一秒钟内的第几张] 作为文件名不是更科学吗?
你代码里已经得到时间了,转成YYYYMMDDHHMMSS这种格式不会是什么问题吧?
回复 支持 反对

使用道具 举报

发表于 2007-3-22 17:14:09 | 显示全部楼层
生成该文件的md5后者其它摘要做其文件名。

在jpg文件内写照片的附加信息
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-23 11:12:07 | 显示全部楼层
to:gamedragon
你好,我是得到了日期时间+1秒内的第几张,这样的文件名.
但是,我用的方法感觉太笨了!又要把时间转换成自符串,又是要用循环尝试保存文件,自己都受不了了!有没有聪明点的方法啊.
to:大家
各位高手有什么好方法,请告诉我大体的思路,当然直接是源代码最好了,呵呵.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表