Ahoj, dá se nějak zjistit, zda-li soubor X na disku je soubor, nebo adresář, a poté ho přejmenovat na soubor/adresář Y za předpokladu, že se mezi těmito dvěma operacemi ze souboru nestal adresář či opačně (v důsledku nějaké paralelní operace)? MoveFileEx (kernel32) nerozlišuje mezi souborem a adresářem.
Příklad, čeho se chci vyvarovat. Řekněme, že uživatel smí přejmenovávat/přesouvat soubory, ale ne adresáře. Pseudokód:
RenameFileOnly(string from, string to) {
if (File.Exists(from)) {
// jiný proces zde smaže soubor 'from' a vytvoří adresář 'from'
Kernel32.MoveFileEx(from, to) // přejmenuje adresář... fuck
}
}
btw. je mi jedno, pokud jiný proces nahradí soubor souborem, nebo adresář jiným adresářem.
Napadlo mě nejprve založit cílový soubor/adresář a použít MOVEFILE_REPLACE_EXISTING, ale to failne jen pokud přejmenovávám soubor (na existující adresář), ne naopak.