2015-04-11 2 views
0

я создаю временный файл и получить свой путь с этим кодом:C# Path.GetTempFileName() с определенным путем

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 использованием в компрессоре изображения. Он получает строковый путь к файлу, создавая файл tmp в C:\Users\User1\AppData\Local\Temp, получая изображение в Link, затем закодировал 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 
+0

возможно дубликат [Как сгенерировать случайное имени текстового файла в C#?] (Http://stackoverflow.com/questions/1270584/how-to-generate-a-random -named-text-file-in-c) –

+0

Отредактированный вопрос: случайное имя файла. –

+0

Я в замешательстве. Ваш код выше в настоящее время вызывает 'GetRandomFileName()', а не 'GetTempFileName()' – DWright

ответ

0

Если проблема заключается в том, что код не имеет разрешения на временной папке, как просто о создании уникального имени файла в папке коды делают разрешение на? Функция 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. 
+0

Отредактированный вопрос Я не хочу случайного имени файла. –

+1

Не знаете, почему вы не хотите использовать 'GetRandomFileName()'? Даже 'GetTempFileName()' возвращает квази-случайное имя файла, поскольку оно должно возвращать уникальное имя файла. Но 'GetTempFileName' привязан к временному каталогу. Мой подход позволит вам создать файл, который гарантирует уникальность в каталоге по вашему выбору. Казалось, это то, что вы хотели? – DWright

+0

Хорошо, я извиняюсь, я написал это неправильно, это не GetRandomFileName(). Это GetTempFileName() –

Смежные вопросы