Одной из причин того, что ваш скрипт может не работать, является то, что вы включили его в <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>
Гарантируемый быть (статистически) уникальным:
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.
Почему не проверка, если файл существует?
string fileName;
do
{
fileName = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".csv";
} while (System.IO.File.Exists(fileName));
Попробуйте эту функцию...
public static string GetTempFilePathWithExtension(string extension) {
var path = Path.GetTempPath();
var fileName = Guid.NewGuid().ToString() + extension;
return Path.Combine(path, fileName);
}
Это возвратит полный путь с расширением по Вашему выбору.
Примечание, это, как гарантируют, не произведет уникальное имя файла, так как кто-то еще, возможно, технически уже создал тот файл. Однако возможности кого-то предполагающего следующий гуид, произведенный Вашим приложением и создающий его, являются очень очень низкими. Довольно безопасно предположить, что это будет уникально.
Можно также сделать следующий
string filename = Path.ChangeExtension(Path.GetTempFileName(), ".csv");
, и это также работает, как ожидается
string filename = Path.ChangeExtension(Path.GetTempPath() + Guid.NewGuid().ToString(), ".csv");
Я смешался @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;
}
Вы также можете альтернативно использовать 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.
Как насчет:
Path.Combine(Path.GetTempPath(), DateTime.Now.Ticks.ToString() + "_" + Guid.NewGuid().ToString() + ".csv")
Очень маловероятно, что компьютер сгенерирует один и тот же Guid в один и тот же момент времени. Единственная слабость, которую я здесь вижу, - это влияние на производительность DateTime.Now.Ticks.