使用文件流缓存行为

本文关键字:缓存 文件 | 更新日期: 2023-09-27 18:32:54

我相信我看到了使用

try catch finally

与文件流对象。

我正在尝试将PictureBox图像保存到如下所示的网络文件路径:

''img_srv'permitimages'2014'Building'4454-1.tif

以下是执行保存和递增文件名的代码:

public void save_file_name()
{
    gen_full_yr_image_path();
    string image_path = get_full_yr_image_path();
    bool does_file_exist = true;
    FileStream test_file = null;
    while (does_file_exist)
    {
        try
        {
            test_file = new FileStream(image_path, FileMode.Open, FileAccess.Read);
            test_file.Close();
            test_file.Dispose();
            test_file = null;
            gen_image_file_name();
            gen_full_yr_image_path();
            image_path = get_full_yr_image_path();
        }
        catch
        {
            does_file_exist = false;
            test_file = new FileStream(image_path, FileMode.CreateNew, FileAccess.Write);
            test_file.Close();
            test_file.Dispose();
            test_file = null;
            m_scanned_pic.Image.Save(image_path, System.Drawing.Imaging.ImageFormat.Tiff);
        }
        finally
        {
            if (null != test_file)
            {
               test_file.Close();
               test_file.Dispose();
            }
        }
    }
}

我看到的行为如下:

如果''img_srv'permitimages'2014'Building'4454-1.tif不存在,则尝试打开文件会导致异常。这是预期的行为。

但是,如果''img_srv'permitimages'2014'Building'4454-1.tif确实存在,则下一个增量文件名

''img_srv'permitimages'2014'Building'4454-2.tif

创建之后

test_file = new FileStream(image_path, FileMode.Open, FileAccess.Read);

并且我已经验证了尚不存在,没有创建文件未找到异常。我相信某种缓存行为正在发生,并且想知道该怎么做才能"重置"所有内容。

我知道这不应该发生,但我真的已经验证了这一点。这就是为什么我相信以前的文件存在以某种方式缓存在我的代码中。我只是没有看到在哪里。

使用文件流缓存行为

这个问题

test_file.Close();被添加到 catch 后得到了纠正,这已经在原始帖子中更新了。我已经看到未关闭的数据库游标与此类似的行为。