具有特定路径的C#Path.GetTempFileName()

时间:2015-04-11 23:46:39

标签: c# asp.net asp.net-mvc

我正在使用此代码创建临时文件并获取其路径:

    public ActionResult Comp(string Link)
    {
        var sv = Server.MapPath(Link);

            int quality = 45;
            string tempFile = Path.GetTempFileName();
            System.IO.File.Copy(sv, tempFile, true);
            using (var myBitmap = Image.FromFile(tempFile))
            {
                ImageCodecInfo myImageCodecInfo = GetEncoderInfo("image/jpeg");
                Encoder myEncoder = Encoder.Quality;
                EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, quality);
                EncoderParameters myEncoderParameters = new EncoderParameters(1);
                myEncoderParameters.Param[0] = myEncoderParameter;
                myBitmap.Save(sv, myImageCodecInfo, myEncoderParameters);
            }

            System.IO.File.Delete(tempFile);

        return RedirectToAction("Index");
    }

    private static ImageCodecInfo GetEncoderInfo(String mimeType)
    {
        int j;
        ImageCodecInfo[] encoders;
        encoders = ImageCodecInfo.GetImageEncoders();
        for (j = 0; j < encoders.Length; ++j)
        {
            if (encoders[j].MimeType == mimeType)
                return encoders[j];
        }
        return null;
    }

Comp功能在图像压缩器中使用。它获取字符串文件路径,在C:\Users\User1\AppData\Local\Temp中通过Link中的获取图像创建tmp文件,然后编码具有设置质量的tmp文件并将tmp文件设置为获取图像,最后删除tmp文件。但是此代码在C:\Users\User1\AppData\Local\Temp中创建和删除临时文件。我想在特定路径中创建临时文件,因为我的服务器没有获得此路径的权限。所以这段代码可能如下:

string tempFile = Path.GetTempFileName("/Content/temp/");
//It gets error that do not have overload method of GetTempFileName

1 个答案:

答案 0 :(得分:2)

如果问题是代码在temp文件夹中没有权限,那么如何在代码确实具有权限的文件夹中创建唯一文件名呢?函数Path.GetRandomFileName()将这样做。它不会为您创建文件,它只是创建一个随机文件名,您可以在您选择的文件夹中使用它。为了更加安全,您可以先检查文件是否已存在,但这种可能性很小。

示例:

String folderPathThatYouCanWriteTo = "Your Writable Path here";
String fullFilePath = null;
do
{
    fullFilePath = String.Format(@"{0}\{1}", folderPathThatYouCanWriteTo, Path.GetRandomFileName());
} while (File.Exists(fullFilePath));

//Now you can use fullFilePath
etc.