Редактирование файлов в System32 - файл фактически не появляется, но программа его определяет - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, Пытаюсь написать программу, которая бы меняла расширение файла в папке System32 с C_1252.NLS на C_1252.bak (или вовсе удаляла этот файл), а затем создавала бы копию другого файла C_1251.NLS с названием C_1252.NLS. Собственно, проблема в том, что при попытке сменить расширение файла, этот файл не находится вообще(Необработанное исключение типа "System.IO.FileNotFoundException" в mscorlib.dll Дополнительные сведения: Файл 'C:\Windows\System32\C_1252.NLS' не найден.), хотя он точно есть в системе. При попытке скопировать любой другой файл в этой папке не происходит ничего, однако если открыть папку через OpenFileDialog, мы видим, что файл создался (где-то?), и если попытаться скомпилировать код еще раз, будет выдана ошибка, что файл ***copy.nls уже существует, хотя в проводнике его все еще нет. (см. скриншоты) Вопрос : Возможна ли в принципе реализация подобной программы? И почему невозможно создать копию файла и переименовать его посредством кода, а вручную вполне себе получается?
namespace reg
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        public static void AddFileSecurity(string fileName, string account,
            FileSystemRights rights, AccessControlType controlType)
        {
            
            FileSecurity fSecurity = File.GetAccessControl(fileName);
 
            fSecurity.AddAccessRule(new FileSystemAccessRule(account,
                rights, controlType));
 
            File.SetAccessControl(fileName, fSecurity);
 
        }
 
        private void button2_Click(object sender, EventArgs e)
        {

            string foldertrue1 = "C:\\Windows\\System32\\C_1251.NLS";
            string foldertrue2 = "C:\\Windows\\System32\\C_1252.NLS";
            string filePath1 = "";
            string filePath2 = "";

                using (new ProcessPrivileges.PrivilegeEnabler(Process.GetCurrentProcess(), Privilege.TakeOwnership))
                {
                    //для папки
                    string mainpath = ("C:\\Windows\\System32");
                    var di = new DirectoryInfo(mainpath);
                    var ds = di.GetAccessControl();
                    ds.SetOwner(WindowsIdentity.GetCurrent().User);
                    Directory.SetAccessControl(mainpath, ds);
 
                    //для файлов
                    string path = ("C:\\Windows\\System32\\C_1251.NLS");
                    string path2 = ("C:\\Windows\\System32\\C_1251copy.NLS");
                    string pathtodelete = ("C:\\Windows\\System32\\C_1252.NLS");
                    string pathback = ("C:\\Windows\\System32\\C_1252-backup.bak");
                    var fi = new FileInfo(path);
                    var fs = fi.GetAccessControl();
                    string User = Environment.UserName;
                    fs.SetOwner(WindowsIdentity.GetCurrent().User);
                    File.SetAccessControl(path, fs);
                    AddFileSecurity(path, User, FileSystemRights.FullControl, AccessControlType.Allow);
 
                    File.Copy(path, path2);

                }

Решение задачи: «Редактирование файлов в System32 - файл фактически не появляется, но программа его определяет»

textual
Листинг программы
private void button2_Click(object sender, EventArgs e)
{
    File.Copy(@"C:\Windows\System32\C_1251.NLS", @"C:\Windows\System32\C_1251copy.NLS");
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.25 из 5
Похожие ответы