нужно не удалять файл если он записался успешно... как можно отключить флаг DeleteOnClose
и переместить файл из папки temp в нужное место ?
я знаю что можно сделать File::Copy но это ужасно медленно на больших файлах или при больших объемах...
нужно именно делать File::Move без всякого копирования... но сначала нужно его закрыть перед File::Move
а он собака тут же удаляется с этим флагом...
вообщем посоветуйте как победить зло...
еще известно что на native api уровне этот флаг известен как FILE_FLAG_DELETE_ON_CLOSE
может этот флаг нативными функциями можно как то сбросить ?
Здравствуйте, jyuyjiyuijyu, Вы писали:
J>нужно не удалять файл если он записался успешно... как можно отключить флаг DeleteOnClose J>и переместить файл из папки temp в нужное место ?
Всё тривиальное — просто, если у вас NTFS.
Отключить флаг — невозможно. Зато можно сделать вот так:
class Program {
static void Main(string[] args) {
var TempFileName = Path.GetTempFileName();
var f = new FileStream(TempFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite, 512, FileOptions.DeleteOnClose);
using (var w = new StreamWriter(f)) {
w.WriteLine("Hello world!");
CreateHardLink(@"C:\Users\azlygostev\Documents\MyTempFile.txt", TempFileName, 0);
}
}
[DllImport("Kernel32.dll", CharSet = CharSet.Unicode)]
static extern bool CreateHardLink(string lpFileName, string lpExistingFileName, UInt32 lpSecurityAttributes);
}
Вкратце, идея — в следующем:
1. Временный файл открывается с флагом DeleteOnClose, поэтому он исчезает всегда
2. В случае, если нужно его где-то сохранить, то до его закрытия создаётся ещё одна файловая запись в каталоге, которая указывает на те же данные. С нулевым оверхедом на копирование.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, jyuyjiyuijyu, Вы писали:
C>>а не проще его удалять в ручную если чтото пошло не так?
J>прогу могут прибить из диспетчера задачь и тогда ой... да и удобно это когда файл сам J>самоликвидируется во всех случаях кроме удачного финиша...
я не уверен что в этом сценарии файл удалится. хотя если не удалится ничего страшного, это же темп.
а про удобно я вообще не понял в вашем сценарии неоходимы странные танцы. где удобство?
Здравствуйте, cvetkov, Вы писали:
C>я не уверен что в этом сценарии файл удалится. хотя если не удалится ничего страшного, это же темп. C>а про удобно я вообще не понял в вашем сценарии неоходимы странные танцы. где удобство?
удалится я проверял
а удобно то что при любом неудачном раскладе файл самоликвидируется