Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/12: Рейтинг темы: голосов - 12, средняя оценка - 4.58
 Аватар для Яблочница
0 / 0 / 0
Регистрация: 24.07.2009
Сообщений: 25

Запись файла

11.08.2011, 22:49. Показов 2282. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
В чем суть проги - запоминает иностранные слова и потом по клику мыши их выдает. Все слова записаны в разных текстовых файлах, т.е. при клике мыши идет считывание из файла.

чтобы что-то добавить в файл, происходит что-то типа того

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
 
if (label19.Text == "Add Slang")//добавляю сленг
            {
                Content slang = new Content();
                slang.word = textBox2.Text;
                slang.definition = textBox7.Text;
                string t = "\r\n" + slang.word + "\r\n" + slang.definition;
                File.AppendAllText("C:\\Program Files\\Lazy English\\" + label25.Text + comboBox5.SelectedItem.ToString() + "Sfile.txt", t);
                textBox2.Clear();
                textBox7.Clear();
                MessageBox.Show("Slang was added. Thanks.", "Slang was added");
 
            }
в чем проблема: почему-то прога ругается на моменте, когда пытаешься создать новый файл вот тут
"C:\\Program Files\\Lazy English\\"
в чем проблема, как её исправить, и если не исправить, то куда еще можно записать так, чтобы путь был единственно возможным, так как от этого зависит работоспособность проги.

Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.08.2011, 22:49
Ответы с готовыми решениями:

Запись звукового файла поверх существующего mp3 файла
Привет всем. Ситуация интересная. Есть около 3000 mp3 файлов. Есть записан файл, звук из которого нужно вставить в эти 3000 файлов. Ну...

Запись файла
Привет. У меня почему-то не получается записать файл с помощью WinAPI. public static extern IntPtr CreateFileW(string a,int...

Неблокирующая запись файла
Добавил в программу функцию журналирования своих действий и столкнулся с тем, что пока программа работает, пишет действия в текстовый файл,...

10
 Аватар для ushim
179 / 180 / 55
Регистрация: 01.06.2011
Сообщений: 507
11.08.2011, 23:20
Битва Экстрасенсов на ТНТ: угадайте с какой ошибкой вылетает программа и что записано в comboBox5.SelectedItem и label25.Text

Как подсказывает мне моя интуиция, здесь либо неверный путь к файлу, либо доступ к файлу закрыт.
Что можно сделать?
1. заменить "C:\\Program Files\\Lazy English\\" на "D:\\MyProgram\\" и посмотреть вылетит с ошибкой или нет.
2. Перед File.AppendAllText вставить ну и тут на ошибки посмотреть:
C#
1
MessageBox.Show("C:\\Program Files\\Lazy English\\" + label25.Text + comboBox5.SelectedItem.ToString() + "Sfile.txt");
0
 Аватар для Unril
826 / 717 / 110
Регистрация: 06.10.2010
Сообщений: 825
Записей в блоге: 1
11.08.2011, 23:32
Для записи в папку Program Files доступ в винде закрыт. Создавайте папку где-нибудь на C:\ или в папке пользователя, которую можно узнать так:
C#
1
Environment.GetEnvironmentVariable("USERPROFILE");
0
 Аватар для Яблочница
0 / 0 / 0
Регистрация: 24.07.2009
Сообщений: 25
11.08.2011, 23:50  [ТС]
Просто в папку на C: тоже не пишет, говорит, что доступ запрещен(
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
12.08.2011, 01:09
Ну чтобы было можно писать в папку Program Files надо сделать такие действия:
Выделить в обозревателе решений свой проект, нажать правую кнопку, в появившемся меню выбрать: Добавить -> Создать элемент. В появившемся окне выбрать: "Файл манифеста приложения", нажать "Добавить". Далее в обозревателе решений находим этот файл манифеста, если не меняли его имя, то он будет называться: "app.manifest". Открываем его и видим следующее содержимое:
app.manifest
XML
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
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- Параметры манифеста UAC
          При необходимости изменить уровень управления учетными записями Windows замените 
          узел requestedExecutionLevel одним из следующих значений.
 
        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />
 
            Задание узла requestedExecutionLevel отключит виртуализацию файла и реестра.
            Если виртуализацию файла и реестра нужно использовать для обратной 
            совместимости, удалите узел requestedExecutionLevel.
        -->
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
  
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!-- Список всех версий Windows, с которыми это приложение предназначено работать. Windows автоматически выберет наиболее совместимую среду.-->
 
      <!-- Если приложение предназначено для работы с Windows 7, раскомментируйте следующий узел supportedOS-->
      <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->
      
    </application>
  </compatibility>
  
  <!-- Включите темы для общих элементов управления и диалоговых окон Windows (Windows XP и более поздние версии) -->
  <!-- <dependency>
    <dependentAssembly>
      <assemblyIdentity
          type="win32"
          name="Microsoft.Windows.Common-Controls"
          version="6.0.0.0"
          processorArchitecture="*"
          publicKeyToken="6595b64144ccf1df"
          language="*"
        />
    </dependentAssembly>
  </dependency>-->
 
</asmv1:assembly>


Строку:
XML
1
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
Заменяем на:
XML
1
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
Всё теперь при старте программа будет запрашивать права администратора, короче UAC будет просить повышенных привилегий.

До кучи можно ещё расскоментировать эти строки:
XML
1
2
3
4
5
6
7
8
9
10
11
12
  <!-- <dependency>
    <dependentAssembly>
      <assemblyIdentity
          type="win32"
          name="Microsoft.Windows.Common-Controls"
          version="6.0.0.0"
          processorArchitecture="*"
          publicKeyToken="6595b64144ccf1df"
          language="*"
        />
    </dependentAssembly>
  </dependency>-->
Тогда все MessageBox в приложении будут появляться с стилем текущей темы установленной в Windows.
0
 Аватар для Яблочница
0 / 0 / 0
Регистрация: 24.07.2009
Сообщений: 25
12.08.2011, 23:29  [ТС]
Ребят, ну он все равно писать не хочет(
Создала пробный проджект, который просто по кнопке создает файл в определенном месте. Вот код кнопки

C#
1
2
3
4
5
6
7
8
 
private void button1_Click(object sender, EventArgs e)
        {
 
           
            File.Create(Environment.GetEnvironmentVariable("USERPROFILE")+"\\Мои документы");
          
        }
как советовал предыдущий оратор, поменяла в манифест файле строчку.

Буду признательна, если кто-нибудь подскажет, что тогда делать( прогу делала три месяца, жаль, если пропадет(
Миниатюры
Запись файла  
0
 Аватар для Alessandr
20 / 21 / 1
Регистрация: 13.08.2011
Сообщений: 51
13.08.2011, 12:42
Когда вы указываете путь к файлу, убедитесь в его правильности, по вышеприведенному коду вы пытаетесь создать файл "мои документы", хотя такая папка там уже есть.
Попробуйте написать вот так

C#
1
2
3
string path = System.Environment.GetEnvironmentVariable("USERPROFILE") + "\\Мои документы\\" + "Моя папка\\";
Directory.CreateDirectory(path);
File.Create(path +"MyFile.txt");
Тогда в папке мои документы должна создаться папка "Моя папка" а в ней файл MyFile.txt
Если нет покажите какую ошибку выдаст компилятор

Используйте дебагер или с помощью этой команды покжите каакая строка у вас выходит.
C#
1
MessageBox.Show("C:\\Program Files\\Lazy English\\" + label25.Text + comboBox5.SelectedItem.ToString() + \"Sfile.txt\"");
Возможно просто неправильно задано имя, в любом случае покажите какой выходит путь и ошибку
1
 Аватар для ushim
179 / 180 / 55
Регистрация: 01.06.2011
Сообщений: 507
13.08.2011, 23:44
Alessandr, я конечно не уверен, но метод GetEnvironmentVariable может создавать указанный в него путь?
Просто по опыту работы с методами System.IO. если мы пытаемся создать файл в директории, то может появиться исключение, что такой директории не существует.
0
 Аватар для Яблочница
0 / 0 / 0
Регистрация: 24.07.2009
Сообщений: 25
13.08.2011, 23:47  [ТС]
ushim,
судя по тому, что программа все записала правильно, этот способ работает.


В общем, наконец-то я закончила эту прогу и смогу её презентовать.
Спасибо.
0
 Аватар для Alessandr
20 / 21 / 1
Регистрация: 13.08.2011
Сообщений: 51
14.08.2011, 06:42
Яблочница,
Я рад что что это помогло))


ushim,
Нет, тут в другом дело. GEtEvironment просто возвращает путь, например "C:\Users".
Ошибка в том, что была попытка создать файл C:\Users\Мои документы.
Да-да, именно файл. Директория C:\Users существовала, и папка Мои документы тоже, добавив в строку пути папку "Моя папка" и с помощью Directory.Create() мы создали все не существующие папки, а потом с помощью File.Create() создали нужный нам файл, но опять же не забываем, когда мы создаем файл, то необходимо указать его полный путь, включая имя и расширение.

А ошибка возникала потому что мы попытались провернуть действие над системной папкой, вот и не было прав
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
14.08.2011, 11:02
Есть же папка для хранения данных приложений (ну я так понял, иначе не знаю для чего реально она нужна):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    internal class AppFolders
    {
        /// <summary>Корневая папка для всех сохраняемых элементов программы</summary>
        public String MainData { get; private set; }
        /// <summary>Папка для сохранения данных радиостанций</summary>
        public String RadiostationsData { get; private set; }
        /// <summary>Папка для сохранения профилей</summary>
        public String ProfilesData { get; private set; }
 
        /// <summary>
        /// Инициализирует пути к данным приложения
        /// </summary>
        /// <param name="rootDirectoryName">Название корневой папки для хранения данных приложения</param>
        public AppFolders(String rootDirectoryName)
        {
            MainData = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), rootDirectoryName);
            RadiostationsData = Path.Combine(MainData, "RadiostationsData");
            ProfilesPath = Path.Combine(MainData, "Profiles");
        }
    }
Тут следует обратить внимание на:
C#
1
Environment.SpecialFolder.ApplicationData
Добавлено через 5 минут
Да и при отладке можно спокойно посмотреть, что какой путь возвращает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.08.2011, 11:02
Помогаю со студенческими работами здесь

Запись и чтение из файла
Доброго времени суток! Задание было такого: Создать экспертную систему &quot;Где поужинать?&quot;. Реализовать добавление новых вариантов,...

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

Запись и считывание из файла
Здравствуйте! Есть массив целых чисел. К примеру arr = {15, 68 16, ...} Необходимо записать его в xml файл. Вот так должен выглядеть...

Запись файла в кодировке DOS
Добрый день! Нужно записать файл в кодировке CP866 (DOS). Пишу: File.AppendAllText(&quot;1.txt&quot;, &quot;какой-нибудь...

Чтение-запись файла в режиме многопоточности
Всем доброго времени суток! Никогда не имел дела с потоками, а тут вот потребовалось столкнутся. Требуется кусочками считать файл и теми...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru