У меня есть 2 возможных решения, оба из которых направлены на решение проблемы на уровне файлов, а не на уровне настроек ОС.
Если вы хотите изменить политику для политик, то управление политиками WindowsУ меня может быть опция для этого.
WriteThrough
Теперь в игре присутствует целый ряд кэшей - Приложение / Класс, ОС, ОЗУ в Disk Eletronics,И я не уверен, может ли это повлиять на определенный кеш (ы), о котором вы беспокоитесь. Но FileStream имеет опцию «WriteThrough»:
Указывает, что система должна выполнить запись через любой промежуточный кэш и перейти непосредственно на диск.
https://docs.microsoft.com/en-us/dotnet/api/system.io.fileoptions
Кэш приложения / класса тривиален и до 99% отключается этим.
Упоминание о «Системе» указывает мне, что оно попадет в кэш ОС (что вас беспокоит). Но это только одна строка в документации, поэтому я не могу с уверенностью сказать, что она опускается до уровня ОС. Но если есть одна опция, которую я бы определил для входа в файл и предположить, что она будет включена для всех существующих регистраторов, вот она.
Предполагается, что не для ведения журнала или подобной потоковой передачи. работа и основная проблема - это опасность повреждения файла частичной записью, небольшая редизайн может решить эту проблему.
Запись в Tempfile -> Перемещение
Один верный путьчтобы избежать повреждения файла при (пере) его записи, нужно записать в другой временный файл, а затем просто поменять их местами с ходом (который в идеале изменит только записи имени файловой системы). Я написал некоторый пример кода для этого не так давно после того, как увидел это поведение в текстовых процессорах:
string sourcepath; //containts the source file path, set by other code
string temppath; //containts the path of the tempfile. Should be in the same folder, and thus same partiion
//Open both Streams, can use a single using for this
//The supression of any Buffering on the output should be optional and will be detrimental to performance
using(var sourceStream = File.OpenRead(sourcepath),
outStream = File.Create(temppath, 0, FileOptions.WriteThrough )){
string line = "";
//itterte over the input
while((line = streamReader.ReadLine()) != null){
//do processing on line here
outStream.Write(line);
}
}
//replace the files. Pretty sure it will just overwrite without asking
File.Move(temppath, sourcepath);
Недостатком является то, что вам потребуется временно вдвое больше дискового пространства, и это вызоветмного дополнительной работы по написанию некоторых модификаций.