写出大型临时文件的问题

时间:2011-02-25 22:47:37

标签: visual-studio-2010 temporary-files

我有一组大图像文件,我在Visual Studio 2010中用作Windows上的临时交换文件。我正在编写并根据需要读取文件。

问题是,即使每个文件大小相同,我也会得到不同的文件大小。

所以,我可以这样做:

template <typename T>
std::string PlaceFileOnDisk(T* inImage, const int& inSize)
    TCHAR lpTempPathBuffer[MAX_PATH];
    TCHAR szTempFileName[MAX_PATH];
    DWORD dwRetVal = GetTempPath(MAX_PATH, lpTempPathBuffer);
    UINT uRetVal = GetTempFileName(lpTempPathBuffer, TEXT("IMAGE"), 0, szTempFileName);

    FILE* fp;
    fopen_s(&fp, szTempFileName, "w+");
    fwrite(inImage, sizeof(T), inSize, fp);
    fclose(fp);

    std::string theRealTempFileName(szTempFileName);

    return theRealTempFileName;

}

但是这会导致文件大小介于53到65 mb之间(图像为4713 * 5908 * sizeof(无符号短)。

我认为也许'fwrite'对于大文件可能不稳定,所以我把事情搞得一团糟:

template <typename T>
std::string PlaceFileOnDisk(T* inImage, const int& inYSize, const int& inXSize)
    TCHAR lpTempPathBuffer[MAX_PATH];
    TCHAR szTempFileName[MAX_PATH];
    DWORD dwRetVal = GetTempPath(MAX_PATH, lpTempPathBuffer);
    UINT uRetVal = GetTempFileName(lpTempPathBuffer, TEXT("IMAGE"), 0, szTempFileName);

    int y;
    FILE* fp;
    for (y = 0; y < inYSize; y++){
        fopen_s(&fp, szTempFileName, "a");
        fwrite(&(inImage[y*inXSize]), sizeof(T), inXSize, fp);
        fclose(fp);
    }

    std::string theRealTempFileName(szTempFileName);

    return theRealTempFileName;
}

同样的事情:保存到磁盘的文件大小可变,而不是预期的大小。

发生了什么事?他们为什么不一样?

读入功能:

template <typename T>
T* RecoverFileFromDisk(const std::string& inFileName, const int& inSize){

    T* theBuffer = NULL;
    FILE* fp;
    try {
        theBuffer = new T[inYSize*inXSize];
        fopen_s(&fp, inFileName.c_str(), "r");
        fread(theBuffer, sizeof(T), inSize, fp);
        fclose(fp);
    }
    catch(...){
        if (theBuffer != NULL){
            delete [] theBuffer;
            theBuffer = NULL;
        }
    }
    return theBuffer;
}

这个功能可能会遇到类似的问题,但我没有那么远,因为我无法通过写作功能。

我确实尝试使用此页面上的读/写信息: http://msdn.microsoft.com/en-us/library/aa363875%28v=vs.85%29.aspx

但那里的建议根本不起作用,所以我选择了我更熟悉的文件功能。不过,这就是我获得临时文件命名约定的地方。

1 个答案:

答案 0 :(得分:-1)

您是否可以在图像写完后打开图像?听起来你也难以写它?

您只是在询问为什么相同尺寸的图片的文件大小不同?初始文件的大小如何相互比较?它可能与初始图像文件的压缩方式有关。

我不确定你对这些文件做了什么,但是你考虑过更基本的“复制”功能吗?