Доброго времени суток!
Возможно пишу не совсем по теме, но нашла море полезной информации на просторах этого форума. Поэтому обращаюсь именно к Вам.
Задача такова:
Есть два массива значений Х и У координат некоторых точек. По этим точкам строится замкнутая кривая.
Необходимо создать файл, который бы открывался в AutoCAD.
Эта задача решена в методе
Save_Det.
Логика в том, что сначала создаётся строчный массив для сохранения в "dxf" формате, лишь потом массив построчно записывается в файл.
Беда в том, что этот метод корректно работает лишь з массивами длиной до 50 элементов.
Когда передаешь массив длиной в 57 элементов:
Строчный массив создаётся успешно, но при записи что-то происходит. Итоговый файл при открытии получается недописанным. Будто что-то прерывает процесс (после 630 строк записи).
void Save_Det(float[] x, float[] y, string name)
{
int w = 0;
int k = (x.Length - 1) * 12; // the quantity of strings for LINES. One line_to_build writes 12 strings
int counter = 1; //the counter for written lines
string[] s = new string[k + 8 + 1]; // array for all lines
// filling array s[] with text
for (int i = 0; i <= (s.Length - 4); i++)
{
string ch = Convert.ToString(i);
// headlines
switch (ch)
{
case "0":
s[i] = "0";
break;
case "1":
s[i] = "SECTION";
break;
case "2":
s[i] = "2";
break;
case "3":
s[i] = "ENTITIES";
break;
case "4":
s[i] = "0";
break;
}
// detail
if ((i >= 5) && (i < (s.Length - 4)))
{
string j = Convert.ToString(i - 12 * (counter - 1));
switch (j)
{
case "5":
s[i] = "LINE";
break;
case "6":
s[i] = "8";
break;
case "7":
s[i] = "0";
break;
case "8":
s[i] = "10";
break;
case "9":
s[i] = x[counter - 1].ToString("0.000000", System.Globalization.CultureInfo.InvariantCulture);
w++;
break;
case "10":
s[i] = "20";
break;
case "11":
s[i] = y[counter - 1].ToString("0.000000", System.Globalization.CultureInfo.InvariantCulture);
break;
case "12":
s[i] = "11";
break;
case "13":
s[i] = x[counter].ToString("0.000000", System.Globalization.CultureInfo.InvariantCulture);
w++;
break;
case "14":
s[i] = "21";
break;
case "15":
s[i] = y[counter].ToString("0.000000", System.Globalization.CultureInfo.InvariantCulture);
break;
case "16":
s[i] = "0";
counter++;
break;
}
}
// end_of_file
if (i == (s.Length - 4))
{
s[i] = "ENDSEC";
s[i + 1] = "0";
s[i + 2] = "EOF";
}
}
// using stream save file
using (SaveFileDialog SaveFile = new SaveFileDialog())
{
SaveFile.FileName = name;
SaveFile.DefaultExt = "dxf";
SaveFile.Filter = "txt files (*.dxf;*.txt)|*.dxf;*.txt|All files (*.*)|*.*";
SaveFile.FilterIndex = 1;
SaveFile.RestoreDirectory = true;
// if user choose path, program will write data from array s[].
if (SaveFile.ShowDialog() == DialogResult.OK)
{
string PathSave = SaveFile.FileName;
StreamWriter myWriter = File.CreateText(PathSave);
for (int i = 0; i < s.Length; i++)
{
textBox9.Text += s[i] + Environment.NewLine;
myWriter.WriteLine(s[i]);
}
MessageBox.Show("Файл сохранён","УРА",MessageBoxButtons.OK);
}
}
}
Констант на ограничение записи нет, в чём проблема - не пойму.
Подскажите, может есть какое-то ограничение на число записываемых строк "по умолчанию" которое можно изменить?