|
13 / 13 / 3
Регистрация: 21.12.2013
Сообщений: 225
|
||||||
Как правильно открыть и сохранять файлы, которые используются текущим приложением30.01.2015, 22:49. Показов 1718. Ответов 4
Метки нет (Все метки)
Есть программа, результаты её работы я могу сохранять в текстовый файл и потом открывать его. Всё полностью работает, за исключением одной вещи. Поясню:
Во всех приложениях где есть возможность открытия какого-либо файла, сделано так что открытый файл нельзя перемещать, копировать, удалять, переименовывать вручную и т.д., когда он открыт в программе. Я для открытия файла использовал класс File и его методы WriteAllLines и ReadAllLines, но они закрывают файл после работы с ним и с файлом пользователь может делать, что угодно. А я не хочу что бы он этого делал. Если пользователь пытается напр. удалить файл, то перед ним windows показывает окно с текстом: "Действие не может быть выполнено, так как это файл открыть в "Имя_приложения". Закройте файл и повторите попытку." Чтобы у фалов моей проги было такое же сообщения я стал использовать класс StreamWriter и StreamReader. Вот процедуры записи и чтения файла:
Необработанное исключение типа "System.IO.IOException" в mscorlib.dll Дополнительные сведения: Процесс не может получить доступ к файлу "C:\Users\Иван\Desktop\Матрица A.mtrx", так как этот файл используется другим процессом. Если я создам матрицу и сохраню её при помощи при помощи "Сохранить как..." (т.е. при помощи SaveFileDialog), то после этого я могу сохранять при помощи этой же кнопки (процедуры и того же StreamWriter) в файл с тем же именем, а вот при помощи кнопки Сохранить (без SaveFileDialog) я уже не могу сохранить файл, т.к. он сохраняется под тем же именем, что был сохранен через "Сохранить как...". Проблема в том что в каждой кнопке (процедуре) свой StreamWriter или StreamReader. Это можно исправить тем что прописать Имя_СтримРидера.Close(), но тогда пользователь сможет вручную удалять, перемещать ил переименовывать файлы, чего я не хочу ему позволять как было упомянуто выше. Я не знаю что делать!!! Как закрыть перед сохранением StreamReader, с помощью которого был открыть файл, ведь он же в другой процедуре и к нему нет доступа??? Остаётся только объявить все эти Стримы как глобальные, но тогда я не смогу указать имя имя файла, .т.к. оно становится известно только после запуска процедуры на сохранение или открытие файла, а глобальные переменные создаются при запуске приложения. Подскажите что нужно сделать чтобы можно было держать файл открытым, так чтобы пользователь не мог его трогать сам а только через программу до полного закрытия программы или файла. P.S.: Если попытаться удалить или переименовать файл открытый в моей программе, то вылезает сообщение: "Действие не может быть выполнено, так как это файл открыт в "vshost32.exe". Закройте файл и повторите попытку." А моя программа называется matrixcalc.exe. Не знаю скажет ли Вам это о чем-либо, но думаю это важная информация, т.к. если попытаться закрыть файл, открытый в Word 2013, будет написано что файл открыт в "Word (классическое приложение)"
0
|
||||||
| 30.01.2015, 22:49 | |
|
Ответы с готовыми решениями:
4
|
|
Администратор
|
||||||||||||
| 31.01.2015, 10:12 | ||||||||||||
Сообщение было отмечено jugger_off как решение
Решение
jugger_off, уверен ли ты что это действительно необходимо? Если все данные хранятся в памяти, то какая разница сможет ли пользователь удалить файл. При открытии ты его читаешь целиком в память, при сохранении записываешь. Что происходит с файлом в этом промежутке не наше дело.
Если это все-таки необходимо, то можно сделать так (.NET 4.5 и выше): Кликните здесь для просмотра всего текста
Для более старых версий .NET делаем так: Кликните здесь для просмотра всего текста
Обработчики SaveAsMenuButton_Click и OpenMenuButton_Click будут вызывать OpenFile и SaveFile соответственно. Таким образом ты отделишь логику работы с файлом от работы с UI.
2
|
||||||||||||
|
13 / 13 / 3
Регистрация: 21.12.2013
Сообщений: 225
|
||
| 31.01.2015, 10:54 [ТС] | ||
0
|
||
|
Администратор
|
||||||
| 31.01.2015, 11:22 | ||||||
|
3
|
||||||
|
COM‐пропагандист
|
|
| 03.02.2015, 12:20 | |
|
Чтобы нужно записать данные в открытый файл, его не нужно открывать заново, нужно лишь воспользоваться уже созданным файловым потоком.
Итак. Открываем файл файловым потоком FileStream. Из его основе создаём два текстовых потока StreamReader и StreamWriter, один для чтения, второй для записи. Если нужно записать данные в файл с самого начала, можно использовать метод Seek ранее созданного объекта FileStream.
0
|
|
| 03.02.2015, 12:20 | |
|
Помогаю со студенческими работами здесь
5
Правильно ли все файлы сохранять в одну папку Текстовые файлы. Вывести на экран все идентификаторы типов, которые используются в программе Как сделать так чтобы число которое записано в файл проверялось с текущим месяцем и с текущим днём?
Как правильно сохранять настройки? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|