Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 31.03.2016
Сообщений: 13
1

Открытие файла и уникальный путь к нему

12.06.2018, 14:34. Показов 4114. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет, форум. Возникла проблема с указанием пути в программе, как сделать в коде открытие диалогового окна с последующим открытием файла ? Или есть какой-то уникальный путь которые ищет файлы в директории программы
Буду рад ответам

Производится открытие файла на C диске, возможность перезаписи пропадает т.к пользователю необходимы права администратора, на других дисках подобного не возникает

C#
1
2
3
4
5
6
7
8
 private readonly string TemplateFileName = @"C:\Акт проверки.rtf";//путь к файлу
 
wordDocument.SaveAs2(@"C:\AKT1.rtf");//сохроняем наш документ
                wordDocument.Close();//закрываем документ
            }
            catch
            {
                MessageBox.Show("Произошла ошибка!!!");//окно ошибки
Здесь производится пересохранения исходного файла с другим именем

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
public partial class Form5 : Form
    {
 
        private readonly string TemplateFileName = @"C:\Акт проверки.rtf";//путь к файлу
 
        public Form5()
        {
            InitializeComponent();
        }
 
 
        #region Кнока Заменить
        private void btnReplaceText_Click(object sender, EventArgs e)
        {
            table1TableAdapter.Insert(int.Parse(txtK.Text), DateTime.Parse(dtpBirthYear.Text), string.Copy(txtCur.Text), string.Copy(txtNam.Text), string.Copy(txtGr.Text), string.Copy(txtN.Text), string.Copy(txtSp.Text));
            table1TableAdapter.Update(bD1DataSet);
            table1TableAdapter.Fill(this.bD1DataSet.Table1);
 
 
            #region Переменные для хранения данных
            var n = txtN.Text;//фио студента
            var birthYear = dtpBirthYear.Value.ToShortDateString();//дата рождения
            var k = txtK.Text;//кафедра
            var prof = txtSp.Text;//специальность
            var groupe = txtGr.Text;//группа
 
            var sred = txtSr.Text;//средний бал аттестата
            var zaf = txtNam.Text;//фио зав. каф.
            var kur = txtCur.Text;//фио куратора
            #endregion
 
            var wordApp = new Word.Application();//переменная для word
            wordApp.Visible = false;//word скрыт
            try
            {
                var wordDocument = wordApp.Documents.Open(TemplateFileName);//переменная для хранения нашего документа
 
                #region Вставка вмето специальных выражений в нашем файле
                ReplaceWordsStub("n_tab", n, wordDocument);
                ReplaceWordsStub("birthYear", birthYear, wordDocument);
                ReplaceWordsStub("OSNOV", k, wordDocument);
                ReplaceWordsStub("INSPECTOR", prof, wordDocument);
                ReplaceWordsStub("N_O", groupe, wordDocument);
                ReplaceWordsStub("nomer", sred, wordDocument);
                ReplaceWordsStub("N_F", zaf, wordDocument);
                ReplaceWordsStub("N_I", kur, wordDocument);
                #endregion
 
                wordDocument.SaveAs2(@"C:\AKT1.rtf");//сохроняем наш документ
                wordDocument.Close();//закрываем документ
            }
            catch
            {
                MessageBox.Show("Произошла ошибка!!!");//окно ошибки
            }
            finally
            {
                wordApp.Quit();//закрываем word
            }
 
 
        }
        #endregion
 
 
        #region Метод замены ключевых слов на данные
        /// <summary>
        /// Метод замены ключевых слов на данные
        /// </summary>
        /// <param name="stubToReplace">Ключевые слова</param>
        /// <param name="text">Текст, который заменяет ключевые слова</param>
        /// <param name="wordDocument">Наш документ</param>
        private void ReplaceWordsStub(string stubToReplace, string text, Word.Document wordDocument)
        {
            var range = wordDocument.Content;//перменная для хранения данных документа
            range.Find.ClearFormatting();//метод сброса всех натсроек текста
            range.Find.Execute(FindText: stubToReplace, ReplaceWith: text);//находим ключевые слова и заменяем их
        }
        #endregion
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.06.2018, 14:34
Ответы с готовыми решениями:

Открытие файла, используя полный путь к нему
Необходимо открыть текстовый файл для чтения оттуда каких-то данных. Проблема в том, что мне...

HANDLE файла зная путь к нему
Привет всем. Подскажите с помощью какой функции можно получить HANDLE файла, при наличии полного...

Загрузка файла в ТекстБокс и открытие файла, зная его полный путь!
Всем привет! Имеется определенная проблема: ввожу в textbox полный путь к файлу, после сохраняю...

Открытие файла, путь вводится с клавиатуры
Вообщем, мне надо открыть файл для чтения, имя файла я ввожу с клавиатуры. Вот что я написала: ...

18
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,659
Записей в блоге: 14
12.06.2018, 15:01 2
Путь программно определяется. Магического ничего нет.

Добавлено через 8 минут
C#
1
2
3
4
5
6
7
8
private string GetExeDirectory()
        {
            string codeBase = Assembly.GetExecutingAssembly().CodeBase;
            UriBuilder uri = new UriBuilder(codeBase);
            string path = Uri.UnescapeDataString(uri.Path);
            path = Path.GetDirectoryName(path);
            return path;
        }
См также Path.Combine
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,659
Записей в блоге: 14
12.06.2018, 15:09 3
Писать в корень диска - плохо.
0
0 / 0 / 0
Регистрация: 31.03.2016
Сообщений: 13
12.06.2018, 17:36  [ТС] 4
Подскажите пожалуйста, коим образом это интерпретировать в код программы?

Добавлено через 1 час 48 минут
Это путь к директории екзешника?
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,659
Записей в блоге: 14
12.06.2018, 17:44 5
Да. Почти.
Путь к каталогу, где лежит сборка, в которой исполняется этот код.
0
0 / 0 / 0
Регистрация: 31.03.2016
Сообщений: 13
12.06.2018, 18:17  [ТС] 6
Получается, необходимо подключить System.Reflection и System.IO, а после при адресации к файлу можно писать подобным образом @"./имя_файла"; ?
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,659
Записей в блоге: 14
12.06.2018, 18:19 7
Цитата Сообщение от antiPANDA Посмотреть сообщение
необходимо подключить System.Reflection и System.IO
Ага.
Цитата Сообщение от antiPANDA Посмотреть сообщение
а после при адресации к файлу можно писать подобным образом @"./имя_файла"; ?
И вот каким же образом у вас получился такой вывод?
И зачем там @? Потому что красиво?)

Получаете путь к каталогу программы. Добавляете путь к файлу внутри этого каталога, через Path.Combine. Всё.
0
0 / 0 / 0
Регистрация: 31.03.2016
Сообщений: 13
12.06.2018, 18:24  [ТС] 8
Простите, могли бы вы примерно показать данный код?
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,659
Записей в блоге: 14
12.06.2018, 18:25 9
Метод Path.Combine (String, String)
0
0 / 0 / 0
Регистрация: 31.03.2016
Сообщений: 13
12.06.2018, 18:43  [ТС] 10
Все таки я не до конца понимаю ход вашей мысли. Получил путь к каталогу, обьединил пути с помощью Path.Combine, что мне делать с этим далее? Если в Path.Combine мы вводим адрес, то он будет автоматически определять его? если даже директория лежит на другом диске?

[начал изучать C# 3 недели назад]
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,659
Записей в блоге: 14
12.06.2018, 19:02 11
Цитата Сообщение от antiPANDA Посмотреть сообщение
что мне делать с этим далее?
И получили полный путь к файлу. Который можно использовать там, где надо к этому файлу обратиться.
Причём, где бы программа не находилась, путь к файлу будет программно вычислен относительно её каталога. А не зашит в коде.

"./filename" работает в принципе также, но с текущим каталогом. О котором новички понятия не имеют. И потому у них в других условиях такое очевидное и простое решение на удивление не работает.
0
0 / 0 / 0
Регистрация: 31.03.2016
Сообщений: 13
12.06.2018, 19:11  [ТС] 12
Примерно так и получается ?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 private string GetExeDirectory()
        {
            string codeBase = Assembly.GetExecutingAssembly().CodeBase;
            UriBuilder uri = new UriBuilder(codeBase);
            string path = Uri.UnescapeDataString(uri.Path);
            path = Path.GetDirectoryName(path);
            return path;
        }
 
        public static void Main()
        {
 
            string path1 = "D:\\ReplaceWord";
            string path2 = "Release\\Акт проверки.rtf";
            string path3 = "Release\\AKT1.rtf";
            CombinePaths(path1, path2);
            CombinePaths(path1, path3);
        }
        private static void CombinePaths(string p1, string p2)
        {
 
            try
            {
                string combination = Path.Combine(p1, p2);
 
                Console.WriteLine("When you combine '{0}' and '{1}', the result is: {2}'{3}'",
                            p1, p2, Environment.NewLine, combination);
            }
            catch (Exception e)
            {
                if (p1 == null)
                    p1 = "null";
                if (p2 == null)
                    p2 = "null";
                Console.WriteLine("You cannot combine '{0}' and '{1}' because: {2}{3}",
                            p1, p2, Environment.NewLine, e.Message);
            }
 
            Console.WriteLine();
        }
 
    private readonly string TemplateFileName = @"./Акт проверки.rtf";//путь к файлу
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,659
Записей в блоге: 14
12.06.2018, 19:49 13
Нет.
Не надо прописывать полные пути в коде.
Каталог Release и так содержит исполняемый файл.
Подумайте.
0
0 / 0 / 0
Регистрация: 31.03.2016
Сообщений: 13
12.06.2018, 20:00  [ТС] 14
Цитата Сообщение от Rius Посмотреть сообщение
Не надо прописывать полные пути в коде.
C#
1
2
3
4
5
6
7
8
9
 public static void Main1()
        {
 
            string path1 = "\\ReplaceWord";
            string path2 = "\\Акт проверки.rtf";
            string path3 = "\\AKT1.rtf";
            CombinePaths(path1, path2);
            CombinePaths(path1, path3);
        }
Извините, вообще не имею представления об этом. Только начал изучать ООП, нет основ
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,659
Записей в блоге: 14
12.06.2018, 21:22 15
  1. получить путь к каталогу программы
  2. скомбинировать с путём к файлу в каталоге программы
  3. профит
ООП тут вообще ни причём.
0
0 / 0 / 0
Регистрация: 31.03.2016
Сообщений: 13
12.06.2018, 21:47  [ТС] 16
Цитата Сообщение от Rius Посмотреть сообщение
Не надо прописывать полные пути в коде.
Тогда как должен выглядеть путь в коде программы?
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,659
Записей в блоге: 14
12.06.2018, 21:50 17
C#
1
2
3
4
5
string exedir = GetExeDirectory();
string relativeFilePath = "template.rtf";
string fullPath = Path.Combine(exedir, relativeFilePath);
 
using (var stream = new FileStream(fullPath, ...............
0
0 / 0 / 0
Регистрация: 31.03.2016
Сообщений: 13
12.06.2018, 21:53  [ТС] 18
Благодарю
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,659
Записей в блоге: 14
12.06.2018, 21:54 19
Цитата Сообщение от antiPANDA Посмотреть сообщение
А как должен выглядеть код в программе если не писать фулл путь к директории?
См. выше.
0
12.06.2018, 21:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.06.2018, 21:54
Помогаю со студенческими работами здесь

Открытие текстового файла, путь к которому хранится в БД
Доброй ночи! Есть проблема: путь к текстовому файлу хранится в бд. Подскажите, пожалуйста, как...

Открытие файла своим приложением - как передать путь к файлу в качестве параметра в приложение
создал многооконное приложение, которое открывает текстовые файла. На файле в свойствах изменил...

Открытие файла в C# - как правильно указать путь к файлу, чтобы на другом компьютере не надо было его менять?
Здравствуйте! Подскажите пожалуйста как правильно указать путь к файлу что бы на другом компьютере...

Обратиться к файлу, не указывая полный путь к нему
Открывая файл я указываю путь на файл который находится в подкаталоге. system(&quot;start...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru