使用File.WriteAllBytes保存多个图像只保存最后一个

时间:2016-12-28 16:03:49

标签: c#

我正在尝试使用File.WriteAllBytes()保存多个图像,即使我尝试使用'Thread.Sleep()'保存它之间也无法正常工作..

我的代码:

       byte[] signatureBytes = Convert.FromBase64String(model.Signature);
        byte[] idBytes = Convert.FromBase64String(model.IdCapture);

        //Saving the images as PNG extension.
        FileManager.SaveFile(signatureBytes, dirName, directoryPath, signatureFileName);
        FileManager.SaveFile(idBytes, dirName, directoryPath, captureFileName);

SaveFile功能:

    public static void SaveFile(byte[] imageBytes, string dirName, string path, string fileName, string fileExt = "jpg")
    {
        if (!string.IsNullOrEmpty(dirName)
            && !string.IsNullOrEmpty(path)
            && !string.IsNullOrEmpty(fileName)
            && imageBytes.Length > 0)
        {
            var dirPath = Path.Combine(path, dirName);

            var di = new DirectoryInfo(dirPath);

            if (!di.Exists)
                di.Create();

            if (di.Exists)
            {
                File.WriteAllBytes(dirPath + $@"\{fileName}.{fileExt}", imageBytes);
            }
        }
        else
            throw new Exception("File cannot be created, one of the parameters are null or empty.");
    }

2 个答案:

答案 0 :(得分:2)

File.WriteAllBytes():

"创建一个新文件,将指定的字节数组写入文件,然后关闭该文件。如果目标文件已存在,则会被覆盖"

如前所述: https://msdn.microsoft.com/en-ca/library/system.io.file.writeallbytes(v=vs.110).aspx

因此,如果您只能看到最后一个,那么您将覆盖该文件。

答案 1 :(得分:0)

除了(正如@Daniel所说)你覆盖同一个文件的可能性,我不确定这段代码:

        var di = new DirectoryInfo(dirPath);

        if (!di.Exists)
            di.Create();

        if (di.Exists)
        {
            ...
        }

如果调用di.Create()Exists属性被更新,我会感到惊讶。事实上,它是更新 - 我检查了。

因此,如果目录 not 存在,那么即使在创建目录后也不会进入条件部分。这可以解释你的问题吗?