Для целых чисел не требуется никаких дополнительных манипуляций.
Это будет соответствовать каждой цифре с конца, имеющей 1 или более двухзначный шаблон после, и замените ее на себя + ",":
"125465778".replace(/(\d)(?=(\d\d)+$)/g, "$1,");
-> "1,25,46,57,78"
Но поскольку мы хотим иметь 3 в конце, давайте укажем это явно, добавив дополнительные «\ d» до окончания конца ввода:
"125465778".replace(/(\d)(?=(\d\d)+\d$)/g, "$1,");
-> "12,54,65,778"
Синхронизируйте свое написание кода для соединения общего объекта так, чтобы только один поток проник внутрь блока. Другие ожидают до текущих выходов.
lock(this)
{
// perform the write.
}
Обновление: Я предположил, что у Вас есть общий объект. Если бы это различные процессы на той же машине, Вам было бы нужно что-то как Именованное Взаимное исключение. Looky здесь для примера
не лучше заблокировать переменную объекта, а не целый экземпляр?
Операции Файлового ввода-вывода, которые пишут в файл, автоматически заблокируют файл. Проверьте, заблокирован ли файл (путем попытки записи) и если это, не пишут. Прежде, чем сделать любые записи, проверьте метку времени на файле и посмотрите если его больше чем 15 минут.
afaik Вы не можете записать в файл без него заблокированный Windows/независимо от того, что.
Теперь все, это уехало в Вас, должно искать, как сделать вышеупомянутое использование MSDN (извините, я не могу быть побеспокоен для поиска всего этого, и я не помню классы C# очень хорошо).:)
Я не убежден, что блокировка.NET применима к различным процессам. Кроме того, заблокируйте (это) только исключит другие потоки, которые выполняют метод на том же экземпляре "этого" - таким образом, другие потоки даже в том же процессе могли работать сразу на различных экземплярах.
Принятие всех Ваших процессов работает на той же машине, захват файла должен сделать это все же.
Если Вы находитесь на различных машинах, Ваш пробег может варьироваться - win32, утверждает, что имел захват файла, который работает по сети, но исторически приложения, которые полагаются на него (Думают MSAccess) имеют проблемы с повреждением файла так или иначе.
Используйте блокировки файловой системы
Как предложенные другие, блокировки.NET будут иметь ограниченное применение в этой ситуации. Вот код:
FileInfo fi = new FileInfo(path);
if (fi.Exists
&& (DateTime.UtcNow - fi.LastWriteTimeUtc < TimeSpan.FromMinutes(15)) {
// file is fresh
return;
}
FileStream fs;
try {
fs = new FileStream(
path, FileMode.Create, FileAccess.Write, FileShare.Read);
} catch (IOException) {
// file is locked
return;
}
using (fs) {
// write to file
}
Это будет работать через потоки и процессы.
// try enter will return false if another thread owns the lock
if (Monitor.TryEnter(lockObj))
{
try
{
// check last write time here, return if too soon; otherwise, write
}
finally
{
Monitor.Exit(lockobj);
}
}