Запретить редактирование файла - C#

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

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

Всем доброго времени суток. Дано: 1) Очень важный xml файл, который (не обязательно, но желательно) должен лежать в папке с программой. 2) Криворукий, но очень деятельный пользователь. Вопрос: как запретить редактирование файла всем, кроме самой программы? Что я уже попробовал:
FileInfo fi = new FileInfo("123.xml");
if (!fi.Exists)
{
    fi.Create();
}
fi.Attributes = FileAttributes.Normal;
FileStream fs = new FileStream(fi.FullName, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
fs.Write(Resource1.App, 0, Resource1.App.Length);
fs.Close();
fi.Attributes = FileAttributes.System | FileAttributes.Hidden | FileAttributes.ReadOnly;
От обычных пользователей это спасает, но "необычные" легко снимают в свойствах галочку "Только чтение" и спокойно редактируют файл. Можно ли как-то заблокировать изменение этого свойства пользователем? И второй вопрос: иногда появляется исключение "Процесс не может получить доступ к файлу ..., так как этот файл используется другим процессом.". Появляется оно в совершенно произвольные моменты, хотя файл в этот момент используется только моей программой. Что сделать, чтобы файл все-таки записался? Пока использую следующий (думаю, нерациональный) код:
FileInfo fi = new FileInfo("123.xml");
if (!fi.Exists)
{
    fi.Create();
}
fi.Attributes = FileAttributes.Normal;
nanana:
try
{
    FileStream fs = new FileStream(fi.FullName, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
    fs.Write(Resource1.App, 0, Resource1.App.Length);
    fs.Close();
}
catch (System.IO.IOException e)
{
    goto nanana;
}
fi.Attributes = FileAttributes.System | FileAttributes.Hidden | FileAttributes.ReadOnly;
То есть "повторять, пока файл все-таки не запишется". Можео ли это сделать как-то по-другому?

Решение задачи: «Запретить редактирование файла»

textual
Листинг программы
using System;
 
namespace IMyRemotingServices {
    public interface IMyRemotingService {
        bool Block( String name );
        bool Deblock( String name );
        byte[] ReadFile( String name );
    }
}

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


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

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

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