PDA

Просмотр полной версии : [Вопрос] [C#] Разбить программу на файлы



BadPawn
20.10.2016, 08:09
Всем привет.

Предыстория: Пишу мелкие програмки через Microsoft Visual C# 2010 Express для удобства в работе. В момент срочной необходимости сделал прогу учёта пациентов по прикреплению для отправки данных в ТФОМС(ФОНД(гутфомспк.ру)). Внесение, выгрузка данныв в xml формате и прочее. И тут настал момент редактирования отдельных участков кода. То бишь, какие-то поля, какие-либо дополнения.

К сути: Имеется программа, как ее разбить на разные файлы?

К примеру:
Название общей папки, которая будет находится в корне Programs Files > name: Patients
Внутри разветвление папок на: db, head (к примеру)
В db - база данных
В head - файлы, которые подключаются напрямую к программе, вот их через notepadd++ изменять к примеру, и в итоге все изменения учитывались при новом запуске проги.

Так же, например, дома написать какие-либо изменения, придти на работу - заменить один файл. И все.


А если по стандарту, то нужно заменять всю программу в корне. Это до боли не удобно.

Надеюсь поможет кто. Ибо на киберфорумах такую бредню пишут.

ziggi
20.10.2016, 08:25
И что не получается? Если чтение из одного файла уже реализовано, то в чём трудность то вообще?

Disinterpreter
20.10.2016, 10:27
В чем проблема собственно?

BadPawn
20.10.2016, 12:42
1 вкладка - Внести пациента - форма заполнения(addpat)
2 вкладка - Поиск(searchpat)

В скобках указаны названия с которых считывалась инфа в форму.

Сложность в том, что я вообще не понимаю как это делать)

Seregamil
21.10.2016, 16:12
https://habrahabr.ru/post/110999/

Если я правильно понял, то это должно подойти.
При выполнении нужного действия считываете содержимое нужного вам файла и выполняете его.

ziggi
21.10.2016, 19:40
https://habrahabr.ru/post/110999/

Если я правильно понял, то это должно подойти.
При выполнении нужного действия считываете содержимое нужного вам файла и выполняете его.

Мне кажется автору нужно что-то вроде этого: https://msdn.microsoft.com/ru-ru/library/system.io.file(v=vs.110).aspx. Хотя, пока он сам не поймёт то, что у него не получается, вряд ли ему кто-либо сможет помочь.

Seregamil
22.10.2016, 09:19
В head - файлы, которые подключаются напрямую к программе, вот их через notepadd++ изменять к примеру, и в итоге все изменения учитывались при новом запуске проги.

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

BadPawn
26.10.2016, 23:50
Неееет, пацаны, у меня программа целиком, выходящая в namefile.exe. То есть, изменив что-либо в файле, нужно откомпилировать код опять же в тот namefile.exe.

Имеется MainBody(основные действия программы) и MainClass(переменные, массивы, функции и т.п.), нужно переконструировать программу так, что бы 1 кнопка вызывала форму 2:

Application.Run(new Form2());//и это у нас файл: Form2.хз-формат
Далее кнопка 2:

Application.Run(new Form3());//и это у нас файл: Form3.хз-формат

Потом например во второй кнопке, изменил на Form5 и без компиляции открываю экзешник, все изменения работали. Реально вообще?

- - - Добавлено - - -

Известен мне такой метод загрузки текста из файла:

//System.IO
StreamReader sr = new StreamReader("C:/File.txt");
string text;
while ((text = sr.ReadLine()) != null)
{
label1test.Items.Add(text);
}
Как быть с кодом?

Seregamil
27.10.2016, 08:30
Известен мне такой метод загрузки текста из файла:

//System.IO
StreamReader sr = new StreamReader("C:/File.txt");
string text;
while ((text = sr.ReadLine()) != null)
{
label1test.Items.Add(text);
}
Как быть с кодом?



string[] items = File.ReadAllLines("path to file");
label1test.Items.AddRange(items);


Я же дал ссылку по рантайму. Или читать лень?

Набросал рабочий код. Разберетесь - решите свою проблему.

/*
* Создано в SharpDevelop.
* Пользователь: Seregami1
* Дата: 27.10.2016
* Время: 11:09
*
* Для изменения этого шаблона используйте меню "Инструменты | Параметры | Кодирование | Стандартные заголовки".
*/
using System;
using System.IO;
using System.CodeDom.Compiler;

namespace pp
{
class Program
{
public static void Main(string[] args)
{
string sourceCode = File.ReadAllText("csharp_1.cs");
object result = EvalCode("calc", "sum", sourceCode, new object[] {5, 7});
Console.WriteLine("Result: " + (int)result);
Console.ReadKey(true);
}


private static object EvalCode(string typeName, string methodName, string sourceCode, object[] methodParams)
{
var compiler = CodeDomProvider.CreateProvider("CSharp");
var parameters = new CompilerParameters
{
CompilerOptions = "/t:library",
GenerateInMemory = true,
IncludeDebugInformation = true
};
var results = compiler.CompileAssemblyFromSource(parameters, sourceCode);

if (!results.Errors.HasErrors)
{
var assembly = results.CompiledAssembly;
var evaluatorType = assembly.GetType(typeName);
var evaluator = Activator.CreateInstance(evaluatorType);

return (object) evaluatorType.InvokeMember(methodName, System.Reflection.BindingFlags.InvokeMethod, null, evaluator, methodParams);
}

return (object)"Error!";
}
}
}

using System;

public class calc {
public int sum( int a, int b ) {
return a + b;
}
}

В этом примере можете менять файл csharp_1.cs как захотите, при этом перекомпилировать program.cs не нужно.

BadPawn
27.10.2016, 08:37
Спасибо огромнейшее! Начнём разбираться.