Как я могу создать временный файл с определенным расширением с.NET?

Одной из причин того, что ваш скрипт может не работать, является то, что вы включили его в <head>...</head> документа, а не перед закрывающим тегом </body>.

Причина сбоя скрипта в этом случае заключается в том, что <body>...</body> не загружается при запуске скрипта. Проверьте наличие ошибок в консоли вашего браузера.

Другая причина, возможно, в том, что вы загрузили jQuery после своего пользовательского скрипта. Например:

<script>...</script>
<script src="code.jquery.com/jquery-3.3.1.min.js"></script>

вместо:

<script src="code.jquery.com/jquery-3.3.1.min.js"></script>
<script>...</script>
265
задан Luke Girvin 14 March 2016 в 01:38
поделиться

7 ответов

Гарантируемый быть (статистически) уникальным:

string fileName = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".csv"; 

(Для заключения в кавычки из статьи Wiki о вероятности коллизии:

... ежегодный риск того, чтобы быть пораженным метеоритом, как оценивается, является одним шансом в 17 миллиардах [19], который означает, что вероятность - приблизительно 0,00000000006 (6 Г — 10в€ ’11), эквивалентный разногласиям создания нескольких десятков из триллионов UUID через год и наличия одного дубликата. Другими словами, только после генерации 1 миллиарда UUID каждую секунду в течение следующих 100 лет, вероятности создания всего один дубликат составил бы приблизительно 50%. Вероятность одного дубликата составила бы приблизительно 50%, если каждый человек на земле владеет 600 миллионами UUID

РЕДАКТИРОВАНИЕ: также см. комментарии JaredPar.

340
ответ дан Mitch Wheat 23 November 2019 в 02:26
поделиться

Почему не проверка, если файл существует?

string fileName;
do
{
    fileName = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".csv";
} while (System.IO.File.Exists(fileName));
9
ответ дан Matías 23 November 2019 в 02:26
поделиться

Попробуйте эту функцию...

public static string GetTempFilePathWithExtension(string extension) {
  var path = Path.GetTempPath();
  var fileName = Guid.NewGuid().ToString() + extension;
  return Path.Combine(path, fileName);
}

Это возвратит полный путь с расширением по Вашему выбору.

Примечание, это, как гарантируют, не произведет уникальное имя файла, так как кто-то еще, возможно, технически уже создал тот файл. Однако возможности кого-то предполагающего следующий гуид, произведенный Вашим приложением и создающий его, являются очень очень низкими. Довольно безопасно предположить, что это будет уникально.

54
ответ дан JaredPar 23 November 2019 в 02:26
поделиться

Можно также сделать следующий

string filename = Path.ChangeExtension(Path.GetTempFileName(), ".csv");

, и это также работает, как ожидается

string filename = Path.ChangeExtension(Path.GetTempPath() + Guid.NewGuid().ToString(), ".csv");
5
ответ дан nawfal 23 November 2019 в 02:26
поделиться

Я смешался @Maxence и @Mitch Пшеница ответы, имеющие в виду, что я хочу семантический из метода GetTempFileName (имя файла является названием нового созданного файла), добавление предпочтенного расширения.

string GetNewTempFile(string extension)
{
    if (!extension.StartWith(".")) extension="." + extension;
    string fileName;
    bool bCollisions = false;
    do {
        fileName = Path.Combine(System.IO.Path.GetTempPath(), Guid.NewGuid().ToString() + extension);
        try
        {
            using (new FileStream(fileName, FileMode.CreateNew)) { }
            bCollisions = false;
        }
        catch (IOException)
        {
            bCollisions = true;
        }
    }
    while (bCollisions);
    return fileName;
}
0
ответ дан 23 November 2019 в 02:26
поделиться

Вы также можете альтернативно использовать System.CodeDom.Compiler.TempFileCollection .

string tempDirectory = @"c:\\temp";
TempFileCollection coll = new TempFileCollection(tempDirectory, true);
string filename = coll.AddExtension("txt", true);
File.WriteAllText(Path.Combine(tempDirectory,filename),"Hello World");

Здесь я использовал расширение txt, но вы можете указать все, что хотите. Я также установил флаг keep в значение true, чтобы временный файл сохранялся после использования. К сожалению, TempFileCollection создает один случайный файл для каждого расширения. Если вам нужно больше временных файлов, вы можете создать несколько экземпляров TempFileCollection.

18
ответ дан 23 November 2019 в 02:26
поделиться

Как насчет:

Path.Combine(Path.GetTempPath(), DateTime.Now.Ticks.ToString() + "_" + Guid.NewGuid().ToString() + ".csv")

Очень маловероятно, что компьютер сгенерирует один и тот же Guid в один и тот же момент времени. Единственная слабость, которую я здесь вижу, - это влияние на производительность DateTime.Now.Ticks.

6
ответ дан 23 November 2019 в 02:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: