Как я могу переименовать файлы в уникальное имя, которое защищено от ошибок в C #? - PullRequest
2 голосов
/ 05 января 2010

Мое приложение должно копировать / перемещать тысячи файлов в течение дня в каталог. Мне нужно убедиться, что когда я копирую эти файлы, я переименовываю их в нечто уникальное для этого каталога.

У меня нет требований к именам, за исключением того, что они должны быть уникальными.

Как правильно обращаться с этим? Должен ли я использовать какой-то GUID, некоторый инкрементный номер или какой-то другой метод?

Как бы я это сделал в C #?

Ответы [ 5 ]

11 голосов
/ 05 января 2010

Вы можете использовать Path.GetRandomFileName

Однако я не думаю, что сгенерированные имена файлов гарантированно будут уникальными (они генерируются с использованием RNGCryptoServiceProvider ), поэтому лучше использовать GUID

6 голосов
/ 05 января 2010

Я склонен использовать

System.Guid.NewGuid().ToString() + ".jpg"

когда единственным требованием является то, что они обязательно должны быть уникальными.

Это, конечно, уже одна из ваших идей, так что +1 к вам, чтобы подумать об этом первым.

3 голосов
/ 05 января 2010
0 голосов
/ 30 июня 2010

Если вам нужно, чтобы новое имя файла напоминало старое, вы можете использовать это решение:

string oldFileName = @"c:\old\oldfile.txt";
string newFileName = oldFileName.Substring(0, oldFileName.LastIndexOf('.')) + "-";
string oldFileNameExtension = oldFileName.Substring( oldFileName.LastIndexOf('.')+1 );
File.Move(oldFileName, newFileName + DateTime.Now.Ticks.ToString() + oldFileNameExtension);

DateTime.Ticks - целое число типа Long, которое содержит текущую дату, преобразованную в наносекунды. Осторожно: большинство процессоров могут выполнять множество операций до того, как счетчик тиков будет продвинут.

Если вы делаете много файлов одновременно, вам нужно будет добавить цикл while(File.Exists()) с Thread.Sleep(10); в нем. Или, если вы не хотите замедлять его с помощью Thread.Sleep, вы можете добавить счетчик в цикл и добавить его в конец newFileName.

0 голосов
/ 05 января 2010

Вы можете безопасно использовать GUID. Они уникальны, и имя файла может быть сгенерировано с помощью

String filename = Guid.NewGuid().ToString() + ".MyExtension";

br, Марсель

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...