У меня была такая же ошибка, потому что вместо удаления файла я просто удалял ссылки на него. Поиск файла в Finder и его удаление помогли.
Подстрока звучит хорошей мне. Единственный недостаток, о котором я могу сразу думать, - то, что это означает копировать данные каждый раз, но я не волновался бы об этом, пока Вы не доказываете, что это - узкое место. Подстрока проста :)
Вы могли использовать regex, чтобы соответствовать целой записи за один раз и получить поля, но я думаю, что это было бы излишеством.
Используйте FileHelpers.
Пример:
[FixedLengthRecord()]
public class MyData
{
[FieldFixedLength(8)]
public string someData;
[FieldFixedLength(16)]
public int SomeNumber;
[FieldFixedLength(12)]
[FieldTrim(TrimMode.Right)]
public string someMoreData;
}
Затем это настолько просто:
var engine = new FileHelperEngine<MyData>();
// To Read Use:
var res = engine.ReadFile("FileIn.txt");
// To Write Use:
engine.WriteFile("FileOut.txt", res);
Вам, вероятно, придется предостеречься, если конец строк не будет увеличен с пробелами для заполнения поля, то подстрока не будет работать без небольшого количества игры для разработки, сколько еще из строки там должен читать. Это, конечно, только относится к последнему полю :)
К сожалению, из поля CLR только предоставляет Подстроку для этого.
Кто-то в CodeProject сделал пользовательский синтаксический анализатор с помощью атрибутов для определения полей , Вы могли бы хотеть посмотреть на это.
Вы могли настроить источник данных ODBC для файла фиксированного формата и затем получить доступ к нему как к любой другой таблице базы данных. Это имеет добавленное преимущество, что специальные знания формата файла не компилируются в Ваш код в течение того рокового дня, что кто-то решает засунуть дополнительное поле в середине.