Использование FileStream для записи в файл в первый раз после его создания дает исключение - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь написать текст в формате JSON.Но я получаю исключение, подобное тому, что процесс не может получить доступ к файлу C: \ blah blah \ SystemInActivity.json, потому что он используется другим процессом.Но потом, во второй раз, когда я запускаю приложение после создания файла json, а затем, когда я пишу, я не получаю исключения.Пожалуйста, помогите.

class ApplicationSettingsViewModel
    {
        ApplicationSettingsModel model;
        MemoryMappedFile mmf = null;
        public string FullPath = string.Empty;
        //This is not a singleton class but I guess it has to be one but its ok for demonstration.
        public ApplicationSettingsViewModel()
        {
            model = new ApplicationSettingsModel();
            CreateFileWithoutMemoryMap();
            //MemoryMapped();
        }

        public string GetDriectory()
        {
            return Path.GetDirectoryName(FullPath);
        }

        private void CreateFileWithoutMemoryMap()
        {
            var info = Directory.CreateDirectory(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "/" + model.Data.Settings.OrcaUISpecificSettings.TimeOutFolder);
            string path = Path.Combine(info.FullName + @"\" + model.Data.Settings.OrcaUISpecificSettings.File);
            //mmf = MemoryMappedFile.CreateFromFile(path, FileMode.CreateNew, "MyMemoryFile", 1024 * 1024, MemoryMappedFileAccess.ReadWrite);
            FullPath = path;
            if (!File.Exists(path))
            {
                File.Create(path);
            }
        }

        public void WriteToFile(string json)
        {
            try
            {
                FileStream fileStream = File.Open(FullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); //This line giving Exception
                fileStream.SetLength(0);
                fileStream.Close(); // This flushes the content, too.
                using (StreamWriter sw = new StreamWriter(FullPath))
                {
                    sw.Write(json);
                }
            }
            catch (Exception ex)
            {

            }
        }

В конструкторе MainWindow я вызываю метод записи

private ApplicationSettingsViewModel AppViewModel;
public MainWindow()
        {
            InitializeComponent();
            //MessageBox.Show("App Started");
            AppViewModel = new ApplicationSettingsViewModel();
            WriteToFile("Active");

        }
public void WriteToFile(string status)
        {
            var root = new Root();
            string jsonString = string.Empty;
            root.AllApplications.Add(new DataToWrite() { AppName = "DevOrca", Status = status });
            try
            {
                jsonString = JsonConvert.SerializeObject(root, Formatting.Indented);
            }
            catch (Exception ex)
            {
                MessageBox.Show(jsonString);
                MessageBox.Show("Exception");
            }
            mutex.WaitOne();
            //Serialize Contents and write
            AppViewModel.WriteToFile(jsonString);
            //var access = AppViewModel.GetAccessor();
            //byte[] bytes = Encoding.ASCII.GetBytes(jsonString);
            //access.Write(bytes, 0, bytes.Length);
            mutex.ReleaseMutex();
        }

1 Ответ

0 голосов
/ 31 мая 2018

File.Create() метод открывает FileStream, чтобы создать файл, и вам нужно закрыть его, что-то вроде этого:

File.Create(path).Close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...