我每60毫秒以原始rgb 24位格式从服务器(相机传感器)获取图像数据(752x480像素)。我成功尝试使用fopen打开文件(“imageinfo.txt”,“w +”)。
图像原始数据在同一个文件中反复写入并在我的服务器模拟结束时会发生什么,我所拥有的只有一个文件,其中包含最近60 ms内的原始数据。
如何每隔60ms创建一个新文件,并使用winsock recv函数保存我在变量“char img”中获得的图像数据。
模拟时间不是恒定的。例如,模拟将持续10分钟,或20分钟,或30分钟,但我希望每60毫秒创建一个新文件。
if (sscanf(VDScfg.sbuf, "*VDS %d %s %f %dx%d %d", &Channel,ImgType, &SimTime, &ImgWidth, &ImgHeight, &ImgLen) == 6)
{
if (ImgLen > 0) {
if (strcmp(ImgType, "rgb") == 0) {
char *img = (char *)malloc(ImgLen);
for (len=0; len<ImgLen; len+=res) {
if ((res=recv(VDScfg.sock, img+len, ImgLen-len, VDScfg.RecvFlags)) < 0) {
printf ("VDS: Socket Reading Failure\n");
break;
}
}
if (len == ImgLen) {
FILE *fp;
fp=fopen("imageinfo.txt","w+");
fprintf(fp,"%s",img);
fclose(fp);
MinDepthPixel = 0;
nPixel = ImgLen/sizeof(float);
f_img = (float *)img;
for (Pixel = 0; Pixel < nPixel; Pixel++) {
if(f_img[Pixel] < f_img[MinDepthPixel])
MinDepthPixel = Pixel;
}
VDSIF.MinDepth = f_img[MinDepthPixel];
if (VDScfg.Verbose) {
/* Print general image information */
printf ("> %s\n", VDScfg.sbuf);
printf (" Minimal distance: %6.3f m\n Pixel position: x = %u, y = %u\n\n",VDSIF.MinDepth, MinDepthPixel%ImgWidth, MinDepthPixel/ImgWidth);
}
}
free (img);
}
}if (ImgLen > 0) {
`if (strcmp(ImgType, "rgb") == 0) {
char *img = (char *)malloc(ImgLen);
for (len=0; len<ImgLen; len+=res) {
if ((res=recv(VDScfg.sock, img+len, ImgLen-len, VDScfg.RecvFlags)) < 0)
{
printf("VDS: Socket Reading Failure\n");
break;
}
}
if (len == ImgLen) {
FILE *fp;
fp=fopen("imageinfo.txt","w+");
fprintf(fp,"%s",img);
}
}
答案 0 :(得分:0)
您需要使用不同的文件名创建新文件。如果您始终打开相同的文件名,当然您将始终写入同一文件。
以下简单的代码示例将创建并向10个不同的文件写入“hi”:imginfo0.txt - imginfo9.txt。我相信你可以根据自己的需要进行调整。
#include <stdio.h>
#include <string.h>
char filename[32];
int main()
{
FILE * fp;
char img[3];
strcpy(img, "hi");
int i;
for(i=0;i<10;i++)
{
sprintf(filename, "imageinfo%d.txt", i);
fp=fopen(filename,"w+");
fprintf(fp, "%s", img);
fclose(fp);
}
}
请记住在完成文件后fclose()!