Ошибка времени выполнения данный формат пути не поддерживается

1. Ошибка времени выполнения: «Данный формат пути не поддерживается».

Это самая известная ошибка, которую рано или поздно встречает любой начинающий программист. Взгляните на картинку:

Листинг 3. Ошибка в процедуре Assign №1

Впервые встретившись с этой ошибкой, можно прийти в недоумение. Файл, из которого мы собираемся читать, на месте. Он доступен и нормально открывается текстовым редактором. Тем не менее, что-то не так. На самом деле, все просто: во время набора текста программы вместо латинской  «ЦЭ» была напечатана русская «ЭС». К счастью, такая ошибка единственная в своем роде. Раскладки «qwerty» и «йцукен» имеют совпадение только в одном месте.

2. Ошибка времени выполнения: «Файл не найден». 

Листинг 4. Ошибка в процедуре assign №2

Еще одна «механическая» ошибка, связанная с использованием процедуры Assign. В принципе, история похожа на рассказанную выше. Автор программы видит, что файл не найден, идет в папку «123» и не понимает: «Как не найден? Вот же он!»

Рис.1. Файл, да не совсем тот

Все просто: вместо нужного вам текстового файла «55.txt» вы создали файл с именем «55.txt.txt» . Этой ошибки не будет возникать, если вы для себя четко раз и навсегда уясните, что такое расширение в имени файла. И вообще, не пользуйтесь проводником в Windows, а работайте в менеджере файлов, например, в Total Commander.

I am unable to rename a file located in (D drive) using c#. I am getting the error

Exception Details: System.NotSupportedException: The given path’s
format is not supported.

every time.

I am using

string oldfilename = @"D:\abc\file.txt";
string newfilename = @"D:\abc\tree.txt";
System.IO.File.Move(oldfilename, newfilename);

but I am getting the error on the last line.
I also tried changing the first 2 lines to

string oldfilename = "D:\\abc\\file.txt";
string newfilename = "D:\\abc\\tree.txt";

I also ensured that the file «file.txt» exists. Tried to use different location.

I also tried Reading contents of the file.txt, but I am getting same error.
I searched all the Questions on SO, But with no luck I could get this issue resolved. I think there is some issue with the «:» that I am using after the drive letter while specifying the path. Please guide me.

BhushanK's user avatar

BhushanK

1,2056 gold badges23 silver badges39 bronze badges

asked Sep 18, 2015 at 12:51

Thundrstorm's user avatar

12

I tried this on another computer but still it didn’t work!(Surprising).
I have managed to solve this issue by moving «file.txt» to my project folder.
Now I am using

string oldfilename = "file.txt";
string newfilename = "tree.txt";
System.IO.File.Move(oldfilename, newfilename);

And this Works!
This doesn’t seems to be an answer to this question(for me), but It has really worked for me.

answered Sep 18, 2015 at 13:43

Thundrstorm's user avatar

ThundrstormThundrstorm

1813 silver badges16 bronze badges

1

Why don´t you utilize:

 My.Computer.Filesystem.RenameFile("D:\file.txt", "tree.txt")

answered Sep 19, 2015 at 1:45

David BS's user avatar

David BSDavid BS

1,8221 gold badge19 silver badges35 bronze badges

I try it by myself and these variants worked:

        string oldfilename = "C:\\Users\\User\\Downloads\\WorkTemp\\file.txt";
        string newfilename = "C:\\Users\\User\\Downloads\\WorkTemp\\file2.txt";
        System.IO.File.Move(oldfilename, newfilename);


        string oldfilename = @"C:\Users\User\Downloads\WorkTemp\file1.txt";
        string newfilename = @"C:\Users\User\Downloads\WorkTemp\file2.txt";
        System.IO.File.Move(oldfilename, newfilename);

According to the reference source: http://referencesource.microsoft.com/#mscorlib/system/io/filestream.cs#749

NotSupportedException will be thrown if the index of the : in your path is at the third position or later. (One would expect : to be the second character) Are you sure there are no zero-width combining characters or other similar Unicode shenanigans going on in your source?
from that answer

Community's user avatar

answered Sep 18, 2015 at 13:01

Dima Adas's user avatar

Dima AdasDima Adas

3002 silver badges10 bronze badges

5

Пишу сетевое консольное приложение. Вчера написал такой код для преобразования файла в массив байт:

string path = @"C:\Users\Nikita Krasnov\Pictures\3.png";
byte[] file = File.ReadAllBytes(path);

Проблема в том, что вчера это работало, сегодня уже выдает ошибку «Данный формат пути не поддерживается». Знаю что звучит нелепо но это так. Или может я что-то пропустил?

Alexcei Shmakov's user avatar

задан 6 апр 2016 в 17:36

krsnv's user avatar

18

При копировании пути, особенно если это сделано через окошко свойств винды, вначале строки захватывается непечатаемый символ. Это можно проверить, нажимая стрелку вправо/влево в районе начала строки […@»C:…]
Курсор будет «залипать» между » и C на одно нажатие.

ответ дан 14 мар 2019 в 9:42

Ilstep's user avatar

IlstepIlstep

211 бронзовый знак

menreys

0 / 0 / 0

Регистрация: 29.01.2017

Сообщений: 79

1

Ошибка времени выполнения: Файл не найден

29.01.2017, 11:18. Показов 6812. Ответов 1

Метки задачи с, задачи студентам (Все метки)


Файл ‘E:file1.txt’ не найден

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
program text7;
var F1,F2:text;
    S:string;
begin
write(S,'Строка: ');
readln(S);
assign(F1,'file1.txt');
reset(F1);
assign(F2,'file2.txt');
rewrite(F2);
write(F1,S);
while not eof(F1) do 
begin
readln(F1,S);
if s<>'' then write(F2,S);
end;
close(F1);close(F2);
rename(F2,'file1.txt');
end.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

0

Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

29.01.2017, 11:18

1

Эксперт Pascal/Delphi

6803 / 4562 / 4817

Регистрация: 05.06.2014

Сообщений: 22,438

29.01.2017, 11:25

2

Цитата
Сообщение от menreys
Посмотреть сообщение

Файл ‘E:file1.txt’ не найден

Файл должен лежать в папке с программой (в вашей программе указано именно так), либо к нему должен быть указан корректный путь.

1

IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

29.01.2017, 11:25

2

Приложения написанные на Free Pascal могут генерировать ошибку времени выполнения (Run Time Error) когда в программе обнаруживаются определённые аварийные состояния . Этот документ содержит список возможных ошибок и описание их возможных причин.


1 Invalid function number (Неправильный номер функции)

Была попытка неправильного вызова системной функции.


2 File not found (Файл не найден)

Генерируется при попытке перенаименования, стирания или открытия несуществующего файла.


3 Path not found (Путь(директория) не найден)

Генерируется файловой системой когда путь не существует или неправелен.
Также генерируется при попытке получить доступ к несуществующему файлу.


4 Too many open files (Слишком много файлов открыто)

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


5 File access denied (В доступе к файлу — отказано)

Было запрешено получение доступа к файлу. Эта ошибка может произойти по нескольким причинам:

  • При попытке открыть файл, предназначенный только для чтения или в деиствительности являющиёся директорией, для записи.

  • В данный момент занят или заблокирован другим процессом.

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

  • При попытке чтения из файла, открытого только для записи.

  • При попытке записи в файл, открытый только для чтения.

  • При попытке удалить директорию или файл, когда это не возможно.

  • При неимении прав на доступ к данному файлу.


6 Invalid file handle (Неправильный хэндл файла)

Происходит, когда используемая Вами файловая переменная была обнулена (испорчена); Это говорит о том, что память вашей программы была повреждена.


12 Invalid file access code (Неправильные ключи доступа к файлу)

Генерируется когда процедуры reset или rewrite вызываются с неправильным параметром FileMode.


15 Invalid drive number (Неправильный номер диска)

Генерируется когда в функции Getdir или ChDir был передан неправильный номер диска.


16 Cannot remove current directory (Невозможно удалить текущую директорию)

Генерируется при попытке удалить текущую директорию.


17 Cannot rename across drives (Можно переименовывать файлы только в пределах одного диска)

Вы не можете переименовать файл в файл, находяшиёся на другом диске или в другом разделе.


100 Disk read error (Ошибка чтения с диска)

Генерируется при невозможности произвести чтение с диска. Обычно происходит при попытке чтения данных, после его окончания.


101 Disk write error (Ошибка записи на диск)

Генерируется когда Вы пытаетесь записать данные на переполненый диск.


102 File not assigned (Файл не определён)

Генерируется функциями Reset, Rewrite, Append, Rename и Erase, При передаче в них файловой переменной, для которой не была выполнена функция AssignFile.


103 File not open (Файл не открыт)

Генерируется следующими функциями : Close, Read, Write, Seek, EOf, FilePos, FileSize, Flush, BlockRead, и BlockWrite если файл не был открыт.


104 File not open for input (Файл не открыт для чтения)

Генерируется функциями Read, BlockRead, Eof, Eoln, SeekEof и SeekEoln если файл не был открыт при помощи Reset.


105 File not open for output (Файл не открыт для записи)

Генерируется функцией write если текстовый файл не был открыт при помощи Rewrite.


106 Invalid numeric format(Неправильный числовой формат)

Генерируется когда ожидалось числовое значение, но из текстого файла было прочитано не было.


150 Disk is write-protected (Диск защищён от записи)

(Критическая ошибка)


151 Bad drive request struct length (Неправильная длина структуры запроса)

(Критическая ошибка)


152 Drive not ready (Устройство не готово)

(Критическая ошибка)


154 CRC error in data (Ошибка контрольной суммы в данных)

(Критическая ошибка)


156 Disk seek error (Ошибка низкоуровнего поиска на диске)

(Критическая ошибка)


157 Unknown media type (Неизвестный тип …)

(Критическая ошибка)


158 Sector Not Found (Сектор не найден)

(Критическая ошибка)


159 Printer out of paper (Нет бумаги в принтере)

(Критическая ошибка)


160 Device write fault (Сбой записи устройства)

(Критическая ошибка)


161 Device read fault (Сбой чтения устройства)

(Критическая ошибка)


162 Hardware failure (Сбой железа)

(Критическая ошибка)


200 Division by zero (Деление на ноль)

Приложение пыталось разделить число на ноль.


201 Range check error (Ошибка проверки границ)

Если вы компилировали прогамму с включённой провереой границ, Вы можете получить эту ошибку в следующих случаях:

  1. Массив был вызван с индексом, выходящим за декларированые пределы.

  2. Попытка присвоить значение переменной, выходящее за декларированые границы (для instance и enumerated типов).


202 Stack overflow error (Переполнение стека)

Стек превысил свой максимально допустимый размер (в этом случае необходимо уменьшить размер локальных переменных), или стек был повреждён. Эта ошибка генерируется только с включённой проверкой стека.


203 Heap overflow error (Переполнение кучи)

Размер кучи превысил максимально возможный размер. Генерируется при попытке выделить память непосредственно функциями New, GetMem и ReallocMem, или когда экземпляр класса или объекта создаётся и памяти не достаточно. Пожалуйста учтите что, по умолчанию, Free Pascal поддерживает увеличение кучи, то есть, если необходимо, будет произведена попытка её увеличения. Как бы то ни было, если размер кучи превысил максимально допустимый системой и
железом, то Вы получите эту ошибку.


204 Invalid pointer operation (Непрваильная операция с указателем)

Будет сгенерирована при вызове функций Dispose или Freemem с неправильным указателем (чаще всего, Nil)


205 Floating point overflow (Максимальная границы числа с плавающей точкой)

Вы попытались использовать или создать слишком большое число с плавающей точкой.


206 Floating point underflow (Минимальная граница числа с плавающей точкой)

Вы попытались использовать или создать слишком маленькое число с плавающей точкой.


207 Invalid floating point operation (Неправильная операция над числами с плавающей точкой)

Может генерироваться если вы попытались получить квадратный корень или логарифм отрицательного числа.


210 Object not initialized (Объект не инициализирован)

Если программа была скомпилирована с включенной проверкой границ, эта ошибка будет сгенерирована при попытке вызвать виртуальный метод до его конструктора.


211 Call to abstract method (Попытка вызова абстрактного метода)

Ваша программа попыталась вызвать абстрактный виртуальный метод. Абстрактные методы должны быть перекрыты, и только перекрытый метод должен быть вызван.


212 Stream registration error (Ошибка регистрации потока)

Генерируется когда неправильный тип регистрируется в модуле objects.


213 Collection index out of range (Индекс элемента коллекции выходит за допустимые границы)

Генерируется когда Вы попытались обратиться к элементу коллекции с выходящим за допустимые границы индексом (модуль objects).


214 Collection overflow error (Переполнение коллекции)

Размер коллекции превысил максимально допустимый размер, а Вы попытались добавить новый элемент (модуль objects).


215 Arithmetic overflow error (Арифметическое переполнение)

Эта ошибка генерируется когда результат операции превысил допустимые границы. В отличие to Turbo Pascal, эта ошибка генерируется только для 32-bit и 64-bit арифметических переполнений. Это происходит согласно тому, что все операнды конвертируются в 32-bit или 64-bit, до того как производить вычисления.


216 General Protection fault (GP Ошибка защиты памяти)

Приложение попыталось обратиться к недопустимому участку памяти. Это может быть вызвано следующими причинами:

  1. Попытка получить разуказатель для nil.

  2. Попытка получить доступ к выходящему за допустимые границы участку памяти (например, вызов move с неправильной длиной).


217 Unhandled exception occurred (Произошо неизвестное исключение)

Произошло исключение, и для него не существеет хэндла. Модуль sysutils устанавливает handler(менеджер), который отлавливает все исключения, и безопасно выходит в случае обнаружения оного.


219 Invalid typecast (Неправильное приведение типов)

Генерируется когда недопустимое приведение типов производится над классом используя оператор as. Эта ошибка также генерируется, когда объект или класс приводится к недопустимому объекту или классу, и виртуальный метод этого объекта или класса вызывается. Эта последняя ошибка детектируется только с использованием опции -CR компилятора.


227 Assertion failed error (Сбой утверждения)

Утверждение провалено, и процедурная переменная AssertErrorProc не была уcтановлена.


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

Во — вторых, раз это PascalABC.Net, то почему бы не писать в его стиле

const
    filename = 'dat.txt';

var
    f: Text;   // Файловая переменная.
    i: integer;  // Переменная для хранения значения количества подсчитываемых элементов.
    a: real;  // Промежуточная переменная для хранения значения читаемых элементов.
    sum: real;// переменная для хранения значения произведения.

begin
    //    Rewrite(f, filename); 
    //    f.Writeln(2);
    //    f.Writeln(7);
    //    f.Close();
    
    f := OpenRead(filename);
    
    i := 0;               //  Установка счетной переменной в нулевое состояние.
    sum := 0;
    while not f.Eof do  // Цикл для поэлементного чтения из файла.
    begin
        a := f.ReadlnReal();        // Чтение информации из файла.
        write(a:8:2);
        sum := sum + a;
        inc(i);
    end;
    f.Close();
    
    writeln;
    writeln('The number of extracted numbers from the file is: ', i);
    writeln('Summa numbers from a file is equal to: ', sum:0:2);
    readln;
end.

Сообщения и коды ошибок

Сообщения и коды ошибок

  1. Out of memory (выход за границы памяти)
  2. Компилятору не хватает памяти. Имеется ряд возможных решений этой проблемы:

    • Если в опции COMPILE/DESTINATION установлено значение MEMORY, замените эту опцию на DISK.
    • Если в опции OPTIONS/COMPILER/LINK установлено значение MEMORY, замените эту опцию на DISK.
    • Если Вы используете постоянно помещенные в память (резидентные) обслуживающие программы, такие как WINDOWS, SIDEKICK, NORTON
      удалите их из памяти.
    • Если Вы используете интегрированную среду TURBO.EXE, то попробуйте воспользоваться компилятором ТРС.ЕХЕ, он занимает меньше памяти.
    • Если ни одна из рекомендаций не помогает, то, возможно, Ваша программа просто слишком велика, чтобы компилировать ее в таком объеме памяти. В этом случае Вы должны разбить её на два или более модулей.
  3. Indentifier expected (не указан идентификатор). Этот идентификатор не был описан.
  4. Unknow indentifier (неизвестный идентификатор). Этот идентификатор не был описан.
  5. Duplicate indentifier (двойной идентификатор). Попытка дважды описать один и тот же идентификатор.
  6. Syntax error (синтаксическая ошибка). В исходном тексте найден неверный символ. Возможно, Вы забыли заключить в кавычки строковую константу.
  7. Error in real constant (ошибка в вещественной константе).
  8. Error in integer constant (ошибка в целой константе). Учтите, что после целых действительных чисел, превышающих диапазон представления целых чисел (-2147483648…+2147483647), должны ставиться точка и нуль, например 12345678912.0.
  9. String constant exceeds line (строковая константа превышает допустимые размеры). Вероятно, Вы забыли поставить апостроф в конце строковой константы.
  10. Too many nested files (слишком много вложенных файлов). Компилятор допускает не более пяти вложенных исходных файлов.
  11. Unexpected end of file (не найден конец файла).
    Вы могли получить это сообщение об ошибке по одной из следующих причин:

    • Ваш исходный файл закончился перед последним END основного раздела< операторов. Вероятно, в Вашей программе неодинаковое количество операторов BEGIN и END.
    • Включаемый файл заканчивается в середине раздела операторов. Каждый
      раздел операторов должен целиком помещаться в одном файле.
    • Вы не закончили комментарий.
  12. Line to long (слишком длинная строка). Максимальная длина строки, обрабатываемой компилятором, равна 126 символам (обратите внимание: редактор среды может обрабатывать до 249
    символов в строке).
  13. Type identifier expected (здесь нужен идентификатор типа). Не указан тип
    идентификатора.
  14. Too many open files (слишком много открытых файлов). Если появляется эта ошибка, то это означает, что конфигурационный файл CONFIG.SYS операционной системы не включает параметр FILES=XX или этот параметр указывает слишком мало файлов. Увеличьте число файлов до нужного значения, например, до 20.
  15. Invalid file name (неверное имя файла). Имя файла не верно или указан несуществующий путь.
  16. File not found (файл не найден). Файл не был найден в просмотренных
    каталогах.
  17. Disk full (диск заполнен). Удалите некоторые файлы или воспользуйтесь
    новым диском.
  18. Invalid compiler directive (неправильная директива компилятора). Неверная буква в директиве компилятора, один из параметров директивы компилятора неверный, или Вы пользуетесь глобальной директивой компилятора, когда компиляция тела программы уже началась.
  19. Too many files (слишком много файлов). В компиляции программы или программного модуля участвуют слишком много файлов. Попытайтесь не использовать так много файлов, например, объединяя включаемые файлы.
  20. Undefined type in pointer definition (неопределенный тип в объявлении указателя). Попытка объявить типизированный указатель, связанный с необъявленным типом данных.
  21. Variable identifier expected (отсутствует идентификатор переменной). На
    этом месте должен быть идентификатор переменной.
  22. Error in type (ошибка в объявлении типа). Объявление типа не может начинаться с этого символа.
  23. Structure too lage (слишком большая структура). Максимально допустимый размер любого структурированного типа -65520 байт.
  24. Set base type of range (базовый тип множества нарушает границы). Базовый тип множества должен представлять собой тип-диапазон с границами в пределах от 0 до 255 или перечисляемый тип с не более чем 256 значениями.
  25. File components may not be files (компонентами файла не могут быть файлы). Конструкции типа файл файлов не допускаются.
  26. Invalid string length (неверная длина строки). Длина строки должна находиться в диапазоне от 1 до 225.
  27. Type mismatch (несоответствие типов). Это сообщение может быть вызвано
    следующими причинами:

    • Несовместимые типы переменной и выражения в операторе присваивания.
    • Несовместимые типы фактического и формального параметров в обращении к процедуре или функции.
    • Тип выражения несовместим с типом индекса при индексировании массива.
    • Несовместимые типы операндов в выражении.
  28. Invalid subrange base type (неправильный базовый тип для типа-диапазона).Допустимыми базовыми типами являются все порядковые типы.
  29. Lower bound greater than upper bound (нижняя граница больше верхней).Описание типа-диапазона содержит неправильные границы.
  30. Ordinal type expected (нужен порядковый номер). Вещественные, строковые, структурные, процедурные типы и указатели в данном месте программы не допускаются.
  31. Integer constant expected (нужна целая константа).
  32. Constant expected (нужна константа).
  33. Integer or real constant expected (нужна целая или вещественная константа).
  34. Type identifier expected (нужен идентификатор типа).
  35. Invalid function result type (неправильный тип результата функции). Правильными типами результата функции являются все простые типы, строковые типы и указатели.
  36. Label identifier expected (нужен идентификатор метки). Метка не обозначена с помощью идентификатора, как это требуется из контекста программы.
  37. BEGIN expected (нужен BEGIN).
  38. END expected (нужен END).
  39. Integer expression expected (нужно выражение типа INTEGER).
  40. Ordinal expression expected (нужно выражение перечисляемого типа). Предшествующее выражение должно иметь перечисляемый тип.
  41. Boolean expression expected (нужно выражение типа BOOLEAN). Предшествующее выражение должно иметь тип BOOLEAN.
  42. Operand types do not match operator (типы операндов не соответствуют операции). Данная операция не может быть применена к указанным операндам, например, ‘A’ div ‘2’.
  43. Error in expression (ошибка в выражении). Данный символ не может участвовать в выражении указанным образом. Возможно, Вы забыли указать операцию между двумя операндами.
  44. Illegal assignment (неверное присваивание). Файлам и не типизированным переменным нельзя присваивать значения. Идентификатору функции можно присвоить значение только внутри раздела операторов данной функции.
  45. Field identifier expected (нужен идентификатор поля). Попытка использовать запись целиком в том месте, где требуется ссылка на какое-либо поле записи.
  46. Object file too large (объектный файл слишком большой). Турбо-Паскаль не может компоновать файлы .obj больше 64 Кбайт.
  47. Undefined external (неопределенная внешняя процедура). Внешняя процедура или функция не имеет соответствующего определения PUBLIC в объектном файле. Убедитесь, что вы указали все объектные файлы в директивах (SL filename} и проверьте написание идентификаторов процедуры или функции в файле .asm.
  48. Invalid object file record (неправильная запись объектного файла). Файл .obj содержит неверную объектную запись. Убедитесь, что данный файл является действительно файлом .obj
  49. Code segment too large (сегмент кода слишком большой). Максимальный размер кода программы или программного модуля равняется 65520 байт. Если вы компилируете программный модуль, разбейте его на два или более программных модуля.
  50. Data segment too large (сегмент данных слишком велик). Максимальный размер сегмента данных программы равен 65520 байт, включая данные, используемые программными модулями. Если вам нужно большее количество глобальных данных, опишите большие структуры с помощью указателей и выделяйте для них память с помощью процедуры NEW.
  51. DO expected (нужен оператор DO).
  52. Invalid PUBLIC definition (неверное определение PUBLIC). Возможные причины сообщения:
    • Данный идентификатор получил тип PUBLIC, с помощью соответствующей директивы языка ассемблер, но не соответствует описанию EXTERNAL в программе или программном модуле Паскаля.
    • Две или более директивы PUBLIC языка ассемблер определяют один и тот же идентификатор.
    • Файлы .obj определяют символы PUBLIC, не находящиеся в сегменте CODE.
  53. Invalid EXTRN definition (неправильное определение EXTRN). Возможные причины сообщения:
    • Программа на ассемблере ссылается с помощью директивы ETRN на идентификатор, который не описан в программе на Паскале и не был описан в интерфейсных секциях используемых программных модулей.
    • Ассемблерная программа ссылается на идентификатор, обозначающий абсолютную переменную (т.е. определённую словом ABSOLUTE).
    • Ассемблерная программа ссылается на идентификатор процедуры или функции типа INLINE.
  54. Too many EXTRN definition (слишком много определений типа EXTRN).Турбо-Паскаль не может обрабатывать файлы .obj при более чем 256 определениях EXTRN.
  55. OF expected (требуется OF).
  56. INTERFACE expected (требуется интерфейсная секция).
  57. Invalid relocatable reference (недействительная перемещаемая ссылка). Возможные причины сообщения:
    • Файл .obj содержит данные и перемещаемые ссылки в сегментах, отличных от CODE. Например, Вы пытаетесь описать инициализированные переменные в сегменте DATA.
    • Файл .com содержит ссылки с размерами в байтах на перемещаемые символы. Такая ошибка происходит в случае, если Вы используете, операторы HIGH и DOWN с перемещаемыми символами или если Вы ссылаетесь в директивах DB на перемещаемые символы.
    • Операнд ссылается на перемещаемый символ, который не был определен в сегменте CODE или в сегменте DATA.
    • Операнд ссылается на процедуру EXTRN или функцию EXTRN со сдвигом, например, CALL SortProc +8.
  58. THEN expected (требуется THEN).
  59. TO or DOWNTO expected (требуется ТО или DOWNTO).
  60. Undefined forward (неопределенное опережающее описание). Возможные причины сообщения:
    • Были описаны процедура или функция в интерфейсной секции программного модуля, но их определение отсутствует в секции реализации.
    • Процедуры или функции были описаны с помощью опережающего описания, но их определение не найдено.
  61. Too many procedures (слишком много процедур). Турбо-Паскаль не допускает более 512 процедур или функций в одном модуле. Если Вы компилируете программу, то поместите некоторые процедуры или функции в модули. Если Вы компилируете модуль, то разбейте его на два или несколько модулей.
  62. Invalid typecast (неверное преобразование типа). Возможные причины сообщения:
    • Попытка разместить в памяти, занимаемой некоторой переменной, значение выражения другого типа в случае, когда размер размещаемого значения не равен размеру переменной.
    • Вы пытаетесь осуществить преобразование типа выражения, когда разрешается только ссылка на переменную, процедуру или функцию.
  63. Division by zero (деление на ноль). Предшествующая операция пытается выполнить деление на ноль.
  64. Invalid file type (неверный файловый тип). Данный файловый тип не обслуживается процедурой обработки файлов. Например, процедура READLN используется для типизированного файла, или процедура SEEK -для текстового файла.
  65. Cannot Read or Write variables of this type (нет возможности считать или записать переменные данного типа). Нарушены следующие ограничения:
    • Процедуры READ и READLN могут считывать переменные символьного, целого, действительного и строкового типа.
    • Процедуры WRITE и WRITELN могут выводить переменные символьного, целого, действительного, логического и строкового типа.
  66. Pointer variable expected (нужно использовать переменную-указатель). Предыдущая переменная должна быть указателем.
  67. String variable expected (нужна строковая переменная). Предшествующая переменная должна иметь строковый тип.
  68. String expression expected (нужно выражение строкового типа). Предшествующее выражение должно иметь строковый тип.
  69. Unit not found (программный модуль не найден). Один или несколько программных модулей, используемых данным модулем, не указаны в предложении USES.
  70. Unit name mismatch (несоответствие имен программных модулей). Имя программного модуля, найденное в файле .tpu, не соответствует имени, указанному в предложении USES.
  71. Unit version mismatch (несоответствие версий программных модулей). Один или несколько программных модулей, используемых данной программой, были изменены после их компиляции. Воспользуйтесь опцией COMPILE/MAKE или COMPILE/BUILD в интегрированной интерактивной среде или опциями /М или /В в компиляторе ТРС, что позволит автоматически скомпилировать программные модули, нуждающиеся в перекомпиляции.
  72. Duplicate unit name (повторное имя программного модуля). Вы уже указали этот программный модуль в операторе USES.
  73. Unit file format error (ошибка формата файла модуля). Файл .tpu является недействительным. Убедитесь, что это действительно файл .tpu.
  74. Implementation expected (отсутствует исполняемая часть модуля).
  75. Constant and case types do not match (типы констант и тип выражения оператора CASE не соответствуют друг другу). Тип константы оператора CASE не совместим с выражением в операторе варианта.
  76. Record variable expected (нужна переменная типа запись). Предшествующая переменная должна иметь тип запись.
  77. Constant out of range (константа нарушает границы). Возможные причины сообщения:
    • Вы пытаетесь указать индекс массива, выходящий за его границы.
    • Вы пытаетесь присвоить переменной значение, выходящее за границы, допустимые для типа этой переменной.
    • Вы пытаетесь передать в качестве фактического параметра процедуре или функции константу, выходящую за границы, допустимые для типа соответствующего формального параметра.
  78. File variable expected (нужна файловая переменная). Предшествующая переменная должна иметь файловый тип.
  79. Pointer expression expected (нужно выражение типа указатель).
    Предшествующее выражение должно иметь тип указателя.
  80. Integer or real expression expected (нужно выражение типа REAL или INTEGER). Предшествующее выражение должно иметь тип (REAL или INTEGER)
  81. Label not within current block (метка не находится внутри текущего блока). Оператор GOTO не может ссылаться на метку, находящуюся вне текущего блока.
  82. Label already defined (метка уже определена). Данная метка уже помечает оператор.
  83. Undefined label in processing statement part (неопределенная метка в предшествующем разделе операторов). Данная метка была описана, и на неё осуществлялась ссылка в предшествующем разделе операторов, но она не указана в тексте программы.
  84. Invalid @ argument (недействительный аргумент операции @).Действительными аргументами являются идентификаторы переменных, процедур и функций.
  85. Unit expected (нужно кодовое слово UNIT).
  86. «;» expected (нужно указать «;» ).
  87. «:» expected (нужно указать «:» .
  88. «,» expected (нужно указать «,» ).
  89. «(» expected (нужно указать «(» ).
  90. «)» expected (нужно указать «)» ).
  91. «=» expected (нужно указать «=» ).
  92. «:=» expected (нужно указать «:=» ).
  93. «[» or «(.» expected (нужно «[» или «(.»).
  94. «]» or «.)» expected (нужно «]» или «.)»).
  95. «.» expected (нужно «.»).
  96. «..» expected (нужно «..»).
  97. Too many variables (слишком много переменных). Возможные причины сообщения:
    • Общий размер глобальных переменных, описанных в программе или программном модуле, не может превышать 64 Кбайт.
    • Размер локальных переменных, описанных в программе или функции, не может превышать 64 Кбайт.
  98. Invalid FOR control variable (неправильная управляющая переменная оператора FOR). Управляющая переменная оператора FOR должна быть переменной перечисляемого типа, определенной в разделе описаний текущей программы.
  99. Integer variable expected (нужна переменная целого типа) предшествующая переменная должна иметь целый тип. )
  100. Files are not allowed here (здесь не допускаются файлы). Типизированная константа не может иметь файловый тип.
  101. String length mismatch (несоответствие длины). Длина строковой константы не соответствует количеству элементов символьного массива.
  102. Invalid ordering of fields (неверный порядок полей). Поля в константе типа запись должны записываться в порядке их описания.
  103. String constant expected (нужна константа строкового типа).
  104. Integer or real variable expected (нужна переменная типа INTEGER или REAL). Предшествующая переменная должна иметь целый или вещественный тип.
  105. Ordinal variable expected (нужна переменная порядкового типа). Предшествующая переменная должна иметь порядковый тип.
  106. INLINE error (ошибка в операторе INLINE). Оператор «<» не допускается в сочетании с перемещаемыми ссылками на переменные. Такие ссылки всегда имеют размер в слово.
  107. Character expression expected (предшествующее выражение должно иметь символьный тип).
  108. Too many relocation items (слишком много перемещаемых элементов).Размер таблицы перемещения файла .ехе превышает 64К, что является верхним пределом в Турбо-Паскале. Если вы обнаружили эту ошибку, то это значит, что программа просто слишком велика для обработки компоновщиком Турбо-Паскаля. Возможно также, что она слишком велика для выполнения в PC DOS. В таком случае нужно выделить в программе основной раздел, который выполнял бы обращение к двум или более вспомогательным разделам с помощью процедуры EXEC из модуля DOS.
  109. Not enough memory to run program (недостаточно памяти для выполнения программы). Недостаточно памяти для выполнения программы из среды Турбо-Паскаля. Попытайтесь воспользоваться рекомендациями, связанными с ошибкой 1. Если это не поможет, то скопируйте свою программу на диск, выйдите из среды и запустите программу средствами ДОС.
  110. Cannot find EXE file (невозможно найти файл .ехе). по какой-то причине файл .ехе сгенерированный ранее компилятором, исчез.
  111. Cannot run a unit (модуль выполнить нельзя). Вы не можете выполнить программный модуль. Чтобы проверить его, напишите программу, использующую этот программный модуль.
  112. Compilation aborted (компиляция прервана). Компиляция была прервана с помощью CTRL-BREAK.
  113. CASE constant out of range (константа CASE нарушает допустимые границы). Целочисленные константы оператора CASE должны находиться в диапазоне от -32768 до 32767.
  114. Error in statement (ошибка в операторе). Данный символ не может быть первым символом в операторе.
  115. Cannot call an interrupt procedure (невозможно вызвать процедуру прерывания). Вы не можете непосредственно вызвать процедуру прерывания.
  116. Must have an 8087 to compile this (для компиляции необходимо наличие сопроцессора 8087). Для компиляции программ и программных модулей в режиме {$N+} необходим сопроцессор 8087. Используйте программную эмуляцию сопроцессора с помощью директивы {$N+.E+}.
  117. Must be in 8087 mode to compile this (для компиляции необходим режим 8087). Данная программа может быть скомпилирована только в режиме {$N+}. В состоянии {$N-} операции с типами SINGLE, DOUBLE, EXTENDED и СОМР не допускаются.
  118. Target address not found (указанный адрес не найден). Команда COMPILER/FIND ERROR в среде Турбо-Паскаля или опция /F в командной строке компилятора ТРС.ЕХЕ не обнаружила оператор, соответствующий заданному адресу.
  119. Include files are not allowed here (здесь не допускаются включаемые файлы). Раздел операторов должен целиком размещаться в одном файле.
  120. TMP file format error (ошибка формата файла .ТМР). Файл .ТМР является недействительным. Убедитесь, что этот файл является в действительности файлом .ТМР.
  121. NIL expected (нужен NIL).
  122. Invalid qualifier (неверный идентификатор). Возможные причины сообщения:
    • Вы пытаетесь индексировать переменную, которая не является массивом.
    • Вы пытаетесь указать поля в переменной, которая не является записью.
    • Вы пытаетесь использовать в качестве указателя переменную, которая не является указателем.
  123. Invalid variable reference (недействительная ссылка на переменную). Предыдущая конструкция удовлетворяет синтаксису ссылки на переменную, но она не указывает адрес памяти. Наиболее вероятно, что Вы вызываете функцию-указатель, но забываете поставить знак ? после неё.
  124. Too many symbols (слишком много символов). Программа или программный модуль содержат более 64 Кбайт символов. Если Вы компилируете программу с директивой {$D+},xo попробуйте отключить эту директиву или разбейте программу на несколько модулей.
  125. Statement part too large (слишком большой раздел операторов). Турбо-Паскаль ограничивает размер раздела операторов примерно до 24 Кбайт. Если Вы обнаружили эту ошибку, поместите части раздела операторов в одну или несколько процедур и вообще сделайте Вашу программу более структурированной.
  126. Module has no debug information (в модуле нет отладочной информации). Ошибка периода выполнения обнаружена в модуле (программе), который не имеет отладочной информации, и по этой причине Турбо-Паскаль не может указать соответствующий оператор. Перекомпилируйте модуль с включенной опцией {$D+} или воспользуйтесь опцией COMPILER/FIND ERROR, чтобы найти эту ошибку.
  127. Files must be var parameters (файлы должны передаваться как параметры-переменные). Вы пытаетесь передать процедуре или функции параметр-значение файлового типа. Параметры файлового типа должны быть параметрами-переменными.
  128. Too many conditional symbols (слишком много условных символов). Не хватает памяти для определения условных символов (слов, управляющих командами условной компиляции). Попытайтесь удалить некоторые символы или уменьшить их длину.
  129. Misplaced conditional directive (пропущена условная директива). Компилятор обнаружил директиву {$ELSE} или {$ENDIF} без соответствующих директив {$IFDEF}, {$IENDEF} или {$IFOPT}.
  130. ENDIF directive missing (пропущена директива ENDIF). Исходный файл закончился внутри конструкции условной компиляции. В исходном файле должно быть равное количество директив {$IFxxx} и {$ENDIF}.
  131. Error in initial conditional defines (ошибка в условных определениях).
    Исходные условия компиляции, указанные в опции
    OPTIONS/COMPILER/CONDITIONAL DEFINES являются недействительными. В Турбо-Паскале разрешается не указывать условия компиляции; если же приведено несколько условий, они должны разделяться точкой с запятой.
  132. Header does not match previous definition (заголовок не соответствует
    предыдущему определению). Возможные причины сообщения:

    • Заголовок процедуры или функции, указанный в интерфейсной секции, не соответствует заголовку в исполняемой части.
    • Заголовок процедуры или функции, указанный с помощью опережающего описания (FORWARD), не соответствует заголовку найденной далее одноименной процедуры или функции.
  133. Critical disk error (критическая ошибка диска). Во время компиляции
    произошла критическая ошибка диска (например, дисковод находится в
    состоянии «не готов»).
  134. Cannot evaluate this expression (нельзя вычислить данное выражение). В
    выражении-константе или в отладочном выражении Вы пытаетесь
    использовать неподдерживаемые средства, например в описании константы
    пытаетесь использовать функцию SIN или вызвать в отладочном выражении
    определенную пользователем функцию.
  135. Expression incorrectly terminated (некорректное завершение выражения).
    Контекстуально в данном месте программы должен быть конец выражения
    или оператора.
  136. Invalid format specifier (неверный спецификатор формата). Используется
    неверный спецификатор формата или числовой аргумент спецификатора
    формата выходит за допустимые границы.
  137. Invalid indirect reference (недопустимая косвенная ссылка). Оператор пытается осуществить недопустимую косвенную ссылку. Например, Вы используете абсолютную переменную, базовая переменная которой в текущем модуле неизвестна, или используете программу типа INLINE , в которой делается ссылка на переменную, неопределенную в текущем модуле.
  138. Structured variable are not allowed here (здесь нельзя использовать переменную структурного типа). Делается попытка выполнить надпеременной структурного типа неподдерживаемую операцию. Например, Вы пытаетесь перемножить две записи.
  139. Cannot evaluate without System unit (нельзя вычислить выражение без модуля SYSTEM). Чтобы отладчик смог вычислить выражение, в файле TURBO.TPL должен содержаться модуль SYSTEM.
  140. Cannot access this symbol (нет доступа к данному символу). Как только вы скомпилируете программу, все множество её символов станет доступным. Однако к отдельным символам (например, к переменным) нельзя получить доступ, пока Вы не запустите программу.
  141. Invalid floating-point operation (недопустимая операция с плавающей запятой). При операции с плавающей запятой произошло переполнение или деление на ноль.
  142. Cannot compile overlay to memory (нельзя выполнить компиляцию оверлеев в память). Программа, использующая оверлеи, должна компилироваться на диск.
  143. Procedure or function variable expected (должна использоваться переменная процедурного типа). В этом контексте оператор получения адреса @ может использоваться только с переменной процедурного типа.
  144. Invalid procedure or function reference (недопустимая ссылка на процедуру или функцию). Возможные причины сообщения:Попытка вызова процедуры в выражении.Процедура или функция, использующая в качестве параметра вызов другой процедуры или функции, должна компилироваться в состоянии {$F+} и не
    может описываться с помощью ключевых слов INLINE или INTERRUPT .
  145. Cannot overlay this unit (этот модуль не может использоваться в качестве оверлейного). Попытка использовать в качестве оверлейного модуль, который не был скомпилирован с директивой {$О+}.
  146. Ошибки, возникающие во время выполнения программы

    Некоторые ошибки, обнаруженные во время выполнения программы, приводят к появлению на экране сообщения вида Runtime error nnn at xxxx:yyyy (ошибка времени выполнения nnn по адресу ххххгуууу), после чего программа завершает свою работу.

    Ошибки времени выполнения делятся на две категории: ошибки ввода-вывода (коды ошибок с 1 до 199) и грубые ошибки (коды ошибок с 200 до 255).

    Ошибки ввода-вывода вызывают завершение выполнения программы в случае, если оператор ввода-вывода был скомпилирован в режиме {$!+}. В режиме {$!-} продолжается выполнение программы, а ошибка возвращается функцией IORESULT. Коды ошибок 1-99 соответствуют кодам ошибок ДОС. 100-149 — ошибкам ввода вывода, 150-199 — критическим ошибкам, а 200-255 — фатальным ошибкам.

    Ошибки DOS:

    1. File not found (не найден файл). Ошибка генерируется процедурами RESET, APPEND, RENAME, или ERASE, если имя, присвоенное файловой переменной, указывает несуществующий файл.
    2. Path not found (путь не найден). Ошибка генерируется
      процедурами:
      • RESET, REWRITE, APPEND или ERASE, если имя,
      присвоенное файловой переменной, является недействительным
      или указывает на несуществующий подкаталог.
      • CHDIR, MKDIR или RMDIR, если путь является
      недействительным или указывает на несуществующий
      подкаталог.
    3. Too many open files (слишком много открытых файлов). Ошибка генерируется процедурами RESET, REWRITE или APPEND, если программа имеет слишком много открытых файлов. Операционная система ДОС не позволяет использовать более 15 открытых файлов для каждого процесса. Если Вы получили данное сообщение при наличии менее 15 открытых файлов, это может означать, что файл CONFIG.SYS не содержит параметр FILES = xxx или этот параметр задает слишком мало файлов. Увеличьте параметр FILES = xxx до какого-либо подходящего значения, например, до 20.
    4. File access defined (отказано в доступе к файлу). Данная ошибка генерируется процедурой:
      • RESET или APPEND, когда имя, присвоенное файловой
      переменной, указывает каталог или файл, доступный только для
      чтения, в то время как параметр FILEMODE файловой
      переменной содержит указание на запись данных.
      • REWRITE, если каталог заполнен или если имя, присвоенное
      файловой переменной, задает каталог или существующий файл,
      доступный только для чтения.
      • RENAME, если имя присвоенное файловой переменной,
      указывает каталог или если новое имя указывает существующий
      файл.
      • ERASE, если имя, присвоенное файловой переменной, указывает
      каталог или файл, доступный только для чтения.
      • MKDIR, если файл с тем же именем уже существует в каталоге, в
      котором создается подкаталог, и в этом каталоге нет места для
      подкаталога или путь к каталогу содержит имя логического
      устройства.
      • RMDIR, если каталог не является пустым, если путь не
      определяет каталог или если путь задает корневой каталог.
      • READ или BLOCKREAD в случае типизированного или
      нетипизированного файла, если файл не открыт для чтения.
      • WRITE или BLOCKWRITE для типизированного или
      нетипизированного файла, если этот файл не открыт для записи.
    5. Invalid file handle (недопустимый файловый канал). Данная ошибка генерируется, когда системному вызову ДОС передается недопустимый файловый канал. Эта ошибка не должна возникать в правильно работающей программе. Её появление является свидетельством того, что файловая переменная каким-либо образом испорчена.
    6. Invalid file access code (недействительный код доступа к файлам). Ошибка генерируется процедурами RESET или APPEND, если значение параметра FILEMODE в файловой переменной не является допустимым.
    7. Invalid drive number (недопустимый номер дисковода). Ошибка генерируется процедурой GETDIR, если номер дисковода не является допустимым.
    8. Cannot remove current directory (нельзя удалить текущий каталог). Ошибка генерируется процедурой RMDIR, если путь указывает текущий каталог.
    9. Cannot rename across drives (нельзя при переименовании указывать разные дисководы). Генерируется процедурой RENAME, если оба файла не находятся на одном и том же диске.

    Ошибки ввода-вывода:

    Если один из операторов компилируется с директивой {$!+}, то ошибка ввода-вывода приводит к прекращению выполнения программы. В состоянии {$!-} программа продолжает выполняться, а ошибка возвращается функцией IORESULT.

  147. Disk read error (ошибка чтения с диска). Генерируется
    процедурой READ в типизированном файле, если Вы пытаетесь
    осуществить считывание после конца файла.
  148. Disk write error (ошибка записи на диск). Ошибка генерируется процедурами CLOSE, WRITE, WRITELN, FLUSH, если диск заполнен.
  149. File not assigned (файлу не присвоено имя), ошибка генерируется процедурами RESET REWRITE , APPEND, RENAME и ERASE в случае, если файловой переменной не было присвоено имя файла с помощью обращения к процедуре ASSIGN.
  150. File not open (файл не открыт). Ошибка генерируется процедурами CLOSE, READ, WRITE, SEEK, EOF, FILEPOS, FILESIZE, FLUSH, BLOCKREAD, BLOCKWRITE, если файл не открыт.
  151. File not open for input (файл не открыт для ввода).ошибка генерируется процедурами READ, READLN, EOF, EOLN, SEEKEOF, или SEEKEOLN в текстовом файле, если файл не открыт для ввода.
  152. File not open for output (файл не открыт для вывода). Ошибка генерируется процедурами WRITE или WRITELN в текстовом файле, если файл не открыт для вывода.
  153. Invalid numeric format (неверный числовой формат). Ошибка генерируется процедурами READ или READLN, если числовое значение, считанное из текстового файла, не соответствует правильному числовому формату.
  154. Критические ошибки:

  155. Disk is write protected (диск защищен от записи).
  156. Unknown unit (неизвестный модуль).
  157. Drive not ready (дисковод находится в состоянии «не готов»).
  158. Unknown command (неопознанная команда).
  159. CRC error in data (ошибка в исходных Данных).
  160. Bad drive requiest structure length (при обращении к диску указана неверная длина структуры).
  161. Disk seek error (ошибка при операции установки головок на диске).
  162. Unknown media type (неизвестный тип носителя).
  163. Sector not found (сектор не найден).
  164. Printer out of paper (закончилась бумага на принтере)
  165. Device write fault (ошибка при записи на устройство).
  166. Device read fault (ошибка при чтении с устройства).
  167. Hardware failure (сбой аппаратуры).
  168. Фатальные ошибки:

    Грубые ошибки всегда приводят к немедленной остановке программы.

  169. Division by zero (деление на нуль).
  170. Range check error (ошибка при проверке границ). Ошибка генерируется операторами, скомпилированными в состоянии {$R+}, при возникновении одной из следующих ситуаций:
    • Индексное выражение массива находилось вне допустимого диапазона.
    • Была осуществлена попытка присвоить переменной значение, находящееся вне диапазона переменной.
    • Была осуществлена попытка передать значение, находящееся вне допустимого диапазона, в качестве параметра процедуре или функции.
  171. Stack overflow error (переполнение стека). Эта ошибка генерируется при входе в процедуру или функцию, скомпилированную в режиме {$8+}, если нет достаточной области для размещения локальных переменных программы. Увеличьте размер стека, используя директиву компилятора {$М}.
  172. Heap overflow error (переполнение кучи). Эта ошибка
    генерируется процедурами NEW или GETMEM в случае, если в
    куче не хватает памяти требуемого размера.
  173. Invalid pointer operation (недействительная операция с указателем). Эта ошибка генерируется процедурами DISPOSE или FREEMEM, когда указатель имеет значение NIL или содержит адрес, лежащий за пределами динамически распределяемой области памяти.
  174. Floating point overflow (переполнение при операции с плавающей запятой).
  175. Floating point underflow (исчезновение порядка при операции с плавающей запятой). Эта ошибка генерируется только в том случае, если используется сопроцессор 8087/80287/80387 с управляющим словом, которое демаскирует ошибку исчезновения порядка. По умолчанию исчезновение порядка приводит к возвращению результата, равного нулю.
  176. Invalid floating point operation (недопустимая операция с плавающей запятой). Возможные причины сообщения:

    • Аргумент функции TRUNC или ROUND не может быть
      преобразован в целое число, находящееся внутри диапазона типа
      LONGINT (от -2147483648 до +2147483647).
    • Отрицательный аргумент функции SQRT (извлечение квадратного корня).
    • Аргумент функции LN (логарифм) равен нулю или имеет отрицательное значение.
    • Произошло переполнение стека сопроцессора.
  177. Overlay manager not installed (не установлена подсистема управления оверлеем). Ваша программа- вызывает оверлейную процедуру или функцию, а подсистема управления оверлеем не инициализирована. Вероятнее всего в программе отсутствует обращение к процедуре OVRINIT или обращение к этой процедуре завершилось с ошибкой. Нужно иметь в виду, что если в каком-либо из оверлейных модулей содержится раздел инициализации, то в программе необходимо создать дополнительный или использовать имеющийся неоверлейный модуль, вызывающий процедуру OVRINIT в своем разделе инициализации, и указать этот модуль в предложении USES перед любым из оверлейных модулей.
  178. Overlay file read error (ошибка чтения оверлейного файла). Когда подсистема управления оверлеем пыталась считать оверлей из оверлейного файла, произошла ошибка чтения.

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая
книга

Рассылка

Благодарности

Об авторе

Ошибки возникающие во время выполнения программ


Некоторые ошибки, обнаруженные во время выполнения программы, приводят к
появлению на экране сообщения вида

Runtime error ппп at хххх:уууу 

(Ошибка периода исполнения ппп по адресу
хххх:уууу)

где ппп — номер ошибки; хххх:уууу — адрес (сегмент и смещение). После этого
сообщения программа завершает свою работу.

Ошибки периода исполнения делятся на четыре категории: ошибки, обнаруживаемые
ДОС (коды ошибок с 1 до 99), ошибки ввода-вывода (с 100 по 149), критические
ошибки (с 150 по 199) и фатальные ошибки (коды ошибок с 200 до 255).

Ошибки, обнаруживаемые ДОС

1 Invalid function number (Неверный номер функции). 

Вы пытаетесь вызвать
несуществующую функцию ДОС.

2 File not found (He найден файл).

Ошибка генерируется процедурами RESET, APPEND, RENAME или ERASE в случае,
если имя, присвоенное файловой переменной, указывает несуществующий файл.

3 Path not found (Путь не найден).

Ошибка генерируется процедурами:

4 Too many open files (Слишком много открытых файлов).

Ошибка генерируется процедурами RESET, REWRITE или APPEND в случае, если
программа имеет слишком много открытых файлов. ДОС не позволяет использовать
более 15 открытых файлов для каждого процесса. Если ошибка возникла при наличии
менее 15 открытых файлов, то она может указывать на то, что файл CONFIG.SYS не
содержит параметра FILES=xxx или что этот параметр задает слишком мало файлов.
Увеличьте параметр FILES=xxx до какого-либо подходящего значения, например, до
80.

5 File access defined (Отказано в доступе к файлу). 

Данная ошибка
генерируется процедурами:

RESET или APPEND в случае, когда имя, присвоенное файловой переменной,
указывает каталог или файл, доступный только для чтения, в то время как параметр
FILEMODE файловой переменной содержит указание на запись данных;
REWRITE в случае, когда каталог заполнен, или если имя, присвоенное
файловой переменной, задает каталог или существующий файл, доступный только для
чтения;
RENAME в случае, если имя, присвоенное файловой переменной, указывает
каталог или если новое имя указывает существующий файл;
ERASE в случае, если имя, присвоенное файловой переменной, указывает
каталог или файл, доступный только для чтения;
MKDIR в случае, если файл с тем же именем уже существует в порождающем
каталоге, если нет места в порождающем каталоге или если путь к каталогу
содержит имя логического устройства;
RMDIR в случае, если каталог не является пустым, если путь не определяет
каталог или если путь задает корневой каталог;
READ или BLOCKREAD в случае типизированного или нетипизированного файла,
если файл не открыт для чтения;
WRITE или BLOCKWRITE для типизированного или нетипизированного файла в
случае, если этот файл не открыт для записи.

6 Invalid file handle (Недопустимый файловый канал).

Данная ошибка генерируется в случае, когда системному вызову ДОС передается
недопустимый файловый канал. Эта ошибка не должна возникать в правильно
работающей программе. Ее появление является свидетельством того, что файловая
переменная каким-либо образом испорчена.

12 Invalid file access code (Недействительный код доступа к файлам). 

Ошибка
генерируется процедурами RESET или APPEND, если значение параметра FILEMODE в
файловой переменной не является допустимым.

15 Invalid drive number (Недопустимый номер дисковода).

Ошибка генерируется процедурой GETDIR в случае, если номер дисковода не
является допустимым.

16 Cannot remove current directory (Нельзя удалить текущий каталог). 

Ошибка
генерируется процедурой RMDIR в случае, если путь указывает текущий каталог.

17 Cannot rename across drives (Нельзя при переименовании указывать разные
дисководы).

Генерируется процедурой RENAME в случае, если оба файла не находятся на одном
и том же диске.

Задание на обработку файлов


Создание программы-заготовки и знакомство с заданием

В качестве примера задания на обработку файлов рассмотрим задание File48.

Напомним, что программу-заготовку для решения этого задания можно создать с помощью
команды
меню «Модули | Создать шаблон программы», кнопки
или клавиатурной
комбинации Shift+Ctrl+L. Эта заготовка будет иметь следующий вид:

uses PT4;

begin
  Task('File48');

end.

После запуска данной программы на экране появится окно задачника:

В первой строке раздела исходных данных указаны имена трех исходных файлов (SA, SB
и SC) и одного результирующего (SD). В последующих строках раздела исходных данных
показано содержимое исходных файлов.
Элементы файлов отображаются бирюзовым цветом, чтобы подчеркнуть их отличие от обычных исходных данных (желтого цвета)
и комментариев (светло-серого цвета).

Поскольку размер файлов, как правило, превышает количество элементов,
которое может уместиться на одной экранной строке,
для отображения содержимого файла может отводиться
более одной экранной строки. Слева от каждой строки с содержимым файла указывается порядковый номер
файлового элемента, значение которого указано первым в этой строке (элементы нумеруются от 1).

Запуск нашей программы признан ознакомительным (и поэтому правильность решения не анализировалась),
так как в ходе ее выполнения не было введено ни одного элемента исходных данных.
При ознакомительном запуске раздел результатов не отображается, однако приводится
пример верного решения, т. е. те числа,
которые должны содержаться в результирующем файле при правильной обработке исходных файлов.


Ввод части исходных данных

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

uses PT4;
var
  i: integer;
  s: string;
  f: array [1..4] of file of integer;
begin
  Task('File48');
  for i := 1 to 3 do
  begin
    read(s);
    Assign(f[i], s);
  end;
end. 

Мы намеренно ограничились тремя итерациями цикла, оставив непрочитанным имя результирующего файла.
Считывание имен файлов производится в одну и ту же переменную s, поскольку после связывания файла,
имеющего имя s,
с соответствующей файловой переменной (процедурой Assign) все остальные действия
с данным файлом в нашей программе
будут осуществляться с использованием файловой переменной, без обращения к имени файла.

Запуск нового варианта программы уже не будет считаться ознакомительным, поскольку в программе
выполняется ввод исходных данных. Так как имя результирующего файла осталось непрочитанным, этот вариант
решения будет признан неверным и приведет к сообщению «Введены не все требуемые исходные данные»:

При этом на экране появится раздел результатов (кроме комментария он пока ничего не содержит),
а также панель индикаторов. Первый из индикаторов
(индикатор ввода) показывает
количество введенных исходных данных. Обратите внимание на то, что второй индикатор
(индикатор вывода) является неактивным: он выделяется серым цветом более светлого
оттенка и не содержит текстового заголовка.
Это объясняется тем, что индикатор вывода показывает количество результирующих данных,
полученных задачником от программы, а в нашем случае программа
не должна передавать задачнику никакие данные; вместо этого ей необходимо создать файл и заполнить его
требуемыми значениями. Для заданий подобного типа (обычно это задания, связанные с обработкой файлов)
индикатор вывода не используется.


Ввод всех исходных данных без создания требуемого файла

Изменим программу, заменив в заголовке цикла число 3 на 4, и вновь запустим программу. Теперь все данные,
необходимые для выполнения задания, введены в программу (это видно по индикатору ввода). Однако задание не выполнено, поскольку результирующий файл
не создан. Поэтому решение опять признано ошибочным с диагностикой «Результирующий файл не найден»:


Пример программы, приводящей к ошибке времени выполнения

Добавим в тело цикла после процедуры Assign вызов процедуры Reset, обеспечивающий открытие существующего файла:

uses PT4;
var
  i: integer;
  s: string;
  f: array [1..4] of file of integer;
begin
  Task('File48');
  for i := 1 to 4 do
  begin
    read(s);
    Assign(f[i], s);
    Reset(f[i]);
  end;
end.  

Теперь запуск программы приведет к сообщению об ошибке «Error System.IO.FileNotFoundException»:

Сообщение, начинающееся со слова Error, означает, что при работе программы произошла ошибка времени выполнения
(Runtime Error). После слова Error указывается имя этой ошибки (в данном случае System.IO.FileNotFoundException,
то есть ошибка ввода-вывода, связанная с тем, что файл не найден)
и краткое ее описание на английском языке.

Сообщение об ошибке времени выполнения появится и в разделе «Список ошибок»
окна PascalABC.NET:


Создание пустого результирующего файла

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

uses PT4;
var
  i: integer;
  s: string;
  f: array [1..4] of file of integer;
begin
  Task('File48');
  for i := 1 to 4 do
  begin
    read(s);
    Assign(f[i], s);
    if i < 4 then Reset(f[i])
    else Rewrite(f[i]);
  end;
  { * }
  for i := 1 to 4 do
    Close(f[i]);
end.  

Комментарий { * } расположен в том месте программы, в котором можно выполнять операции ввода-вывода для всех
четырех файлов: они уже открыты процедурами Reset или Rewrite и еще не закрыты процедурой Close.

Запуск этого варианта программы не приведет к ошибке времени выполнения; более того, результирующий файл будет создан.
Однако созданный файл останется пустым, то есть не содержащим ни одного элемента. Поэтому при запуске программы
на информационной панели появится сообщение «Ошибочное решение»,
а в строке, которая должна содержать элементы результирующего файла, появится текст EOF: (особое значение EOF для
указателя текущей файловой позиции означает, что данный файл существует, но не содержит ни одного элемента):


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

Во всех ранее рассмотренных вариантах программы мы не использовали операции ввода-вывода для файлов.
Поэтому тип файлов не играл никакой роли: вместо типа file of integer мы могли использовать любой другой файловый тип,
например, file of real, и результат выполнения программы был бы тем же самым.

Тип файловых элементов становится принципиально важным, если в программе используются операции ввода-вывода
для данного файла. Чтобы продемонстрировать это на примере нашей программы, внесем в нее следующие изменения:
в описании массива f файловых переменных тип integer заменим на real, в раздел описаний добавим описание
переменной a типа real, в раздел операторов (в позицию, помеченную комментарием { * })
добавим следующий фрагмент:

for i := 1 to 3 do
begin
  read(f[i], a);
  write(f[4], a);
end;

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

Результат работы программы будет неожиданным:

Судя по экранной строке с содержимым результирующего файла, в него будут записаны не три, а шесть элементов,
по два начальных элемента из каждого исходного файла. Объясняется это тем, что после связывания файлов
с файловыми переменными типа file of real элементами файлов стали считаться вещественные числа
(занимающие в памяти по 8 байтов), тогда как «на самом деле», то есть по условию задания, элементами файлов
являются целые числа (занимающие в памяти по 4 байта). Поэтому считывание из файла и последующая запись в файл
одного «вещественного элемента» фактически приводит к считыванию и записи блока данных размером 8 байтов,
содержащего два последовательных целочисленных элемента исходного файла.

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


Исправление ошибки, связанной с неверными типами файловых данных

Заменим в нашей программе все описания real на integer:

uses PT4;
var
  i: integer;
  s: string;
  f: array [1..4] of file of integer;
  a: integer;
begin
  Task('File48');
  for i := 1 to 4 do
  begin
    read(s);
    Assign(f[i], s);
    if i < 4 then Reset(f[i])
    else Rewrite(f[i]);
  end;
  for i := 1 to 3 do
  begin
    read(f[i], a);
    write(f[4], a);
  end;
  for i := 1 to 4 do
    Close(f[i]);
end.  

Мы получим все еще неверное, но вполне «понятное» решение: первые три элемента результирующего файла
совпадают с контрольными (то есть «правильными»), а прочие элементы отсутствуют:


Верное решение

Приведем, наконец, верное решение задания
File48:

uses PT4;
var
  i, a: integer;
  s: string;
  f: array [1..4] of file of integer;
begin
  Task('File48');
  for i := 1 to 4 do
  begin
    read(s);
    Assign(f[i], s);
    if i < 4 then Reset(f[i])
    else Rewrite(f[i]);
  end;
  while not Eof(f[1]) do
    for i := 1 to 3 do
    begin
      read(f[i], a);
      write(f[4], a);
    end;
  for i := 1 to 4 do
    Close(f[i]);
end.  

От предыдущего варианта данное решение отличается добавлением заголовка цикла while not Eof(f[1]) do,
который обеспечивает считывание всех элементов из исходных файлов (напомним, что по условию задания все исходные
файлы имеют одинаковый размер) и запись их в результирующий файл в нужном порядке.
После запуска этого варианта мы получим сообщение «Верное решение. Тест номер 1 (из 5)»,
а после пяти подобных запусков — сообщение «Задание выполнено!»:


Просмотр результатов выполнения задания

Щелкнув мышью на метке «Результаты (F2)», расположенной в правом верхнем
углу окна задачника, или нажав клавишу F2, мы можем вывести на экран окно результатов,
в котором будет перечислены все наши попытки решения задачи:

File48    a08/09 12:43 Ознакомительный запуск.
File48    a08/09 12:50 Введены не все требуемые исходные данные.
File48    a08/09 12:52 Результирующий файл не найден.
File48    a08/09 12:53 Error System.IO.FileNotFoundException.
File48    a08/09 12:57 Ошибочное решение.--3
File48    a08/09 13:06 Задание выполнено!

Для закрытия окна результатов достаточно нажать клавишу Esc.
Окно результатов можно отобразить на экране и после закрытия окна задачника и возврата в среду PascalABC.NET.
Для этого надо использовать команду меню «Модули | Просмотреть результаты», кнопку
или клавиатурную
комбинацию Shift+Ctrl+R.


1 Out of memory (Выход за границы памяти). 2 Identifier expected (Не указан идентификатор). 3 Unknown identifier (Неизвестный идентификатор). 4 Duplicate identifier (Двойной идентификатор). 5 Syntax error (Синтаксическая ошибка). 6 Error in real constant (Ошибка в вещественной константе). 7 Error in integer constant (Ошибка в целой константе). 8 String constant exceeds line (Строковая константа превышает допустимые размеры). 9 Too many nested files (Слишком много вложенных файлов). 10 Unexpected end of file (He найден конец файла). 11 Line too long (Слишком длинная строка) 12 Type identifier expected (Здесь нужен идентификатор типа). 13 Too many open files (Слишком много открытых файлов). 14 Invalid file name (Неверное имя файла). 15 File not found (Файл не найден). 16 Disk full (Диск заполнен). 17 Invalid compiler directive (Неправильная директива компилятора). 18 Too many files (Слишком много файлов). 19 Undefined type in pointer definition (Неопределенный тип в объявлении указателя). 20 Variable identifier expected (Отсутствует идентификатор переменной). 21 Error in type (Ошибка в объявлении типа). 22 Structure too large (Слишком большая структура). 23 Set base type of range (Базовый тип множества нарушает границы). 24 File components may not be files (Компонентами файла не могут быть файлы) . 25 Invalid string length (Неверная длина строки). 26 Type mismatch (Несоответствие типов). 27 Invalid subrange base type (Неправильный базовый тип для типа-диапазона). 28 Lower bound greater than upper bound (Нижняя граница больше верхней). 29 Ordinal type expected (Нужен порядковый тип). 30 Integer constant expected (Нужна целая константа). 31 Constant expected (Нужна константа). 32 Integer or real constant expected (Нужна целая или вещественная константа) . 33 Type identifier expected (Нужен идентификатор типа) 34 Invalid function result type (Неправильный тип результата функции) 35 Label identifier expected (Нужен идентификатор метки). 36 BEGIN expected (Нужен BEGIN). 37 END expected (Нужен END). 38 Integer expression expected (Нужно выражение типа INTEGER). 39 Ordinal expression expected (Нужно выражение перечисляемого типа). 40 Boolean expression expected (Нужно выражение типа BOOLEAN). 41 Operand types do not match operator (Типы операндов не соответствуют операции). 42 Error in expression (Ошибка в выражении). 43 Illegal assignment (Неверное присваивание). 44 Field identifier expected (Нужен идентификатор поля) . 45 Object file too large (Объектный файл слишком большой). 46 Undefined external (Неопределенная внешняя процедура). 47 Invalid object file record (Неправильная запись объектного файла). 48 Code segment too large (Сегмент кода слишком большой). 49 Data segment too large (Сегмент данных слишком велик). 50 DO expected (Нужен оператор DO). 51 Invalid PUBLIC definition (Неверное PUBLIC-определение). 52 Invalid EXTRN definition (Неправильное EXTRN-определение). 53 Too many EXTRN definition (Слишком много EXTRN-определений). 54 OF expected (Требуется OF). 55 INTERFACE expected (Требуется интерфейсная секция). 56 Invalid relocatable reference (Неправильная перемещаемая ссылка). 57 THEN expected (Требуется THEN). 58 TO or DOWNTO expected (Требуется TO или DOWNTO). 59 Undefined forward (Неопределенное опережающее описание). 60 Too many procedures (Слишком много процедур). 61 Invalid typecast (Неверное преобразование типа). 62 Division by zero (Деление на ноль). 63 Invalid file type (Неверный файловый тип). 64 Cannot Read or Write variables of this type (Нет возможности считать или записать переменные данного типа). 65 Pointer variable expected (Нужно использовать переменную-указатель). 66 String variable expected (Нужна строковая переменная). 67 String expression expected (Нужно выражение строкового типа). 68 Circular unit reference (Перекрестная ссылка модулей). 69 Unit name mismatch (Несоответствие имен программных модулей). 70 Unit version mismatch (Несоответствие версий модулей). 71 Duplicate unit name (Повторное имя программного модуля). 72 Unit file format error (Ошибка формата файла модуля). 73 IMPLEMENTATION expected (Отсутствует исполняемая часть модуля). 74 Constant and case types do not match (Типы констант и тип выражения опе- ратора CASE не соответствуют друг другу). 75 Record variable expected (Нужна переменная типа запись). 76 Constant out of range (Константа нарушает границы). 77 File variable expected (Нужна файловая переменная). 78 Pointer expression expected (Нужно выражение типа указатель). 79 Integer or real expression expected (Нужно выражение вещественного или целого типа). 80 Label not within current block (Метка не находится внутри текущего блока) 81 Label already defined (Метка уже определена). 82 Undefined label in processing statement part (Неопределенная метка в предшествующем разделе операторов). 83 Invalid @ argument (Неправильный аргумент операции @). 84 Unit expected (Нужно кодовое слово UNIT). 85 ”;” expected (Нужно указать”;”). 86 ”:” expected (Нужно указать”:”). 87 ”,”expected (Нужно указать”,”). 88 ”(” expected (Нужно указать ”(”). 89 ”)” expected (Нужно указать”)”). 90 ”=” expected (Нужно указать”=”) 91 ”:=” expected (Нужно указать”:=”) 92 ”[” or ”(.”expected (Нужно указать ”[” или ”(.”). 93 ”]” or ”.)” expected (Нужно указать”]” или ”.)”). 94 ”.” expected (Нужно указать”.”) 95 ”..” expected (Нужно указать”..”). 96 Too many variables (Слишком много переменных). 97 Invalid FOR control variable (Неправильный параметр цикла оператора FOR). 98 Integer variable expected (Нужна переменная целого типа). 99 File and procedure types are not allowed here (Здесь не могут использоваться файлы или процедурные типы). 100 String length mismatch (Несоответствие длины строки). 101 Invalid ordering of fields (Неверный порядок полей). 102 String constant expected (Нужна константа строкового типа). 103 Integer or real variable expected (Нужна переменная типа INTEGER или REAL). 104 Ordinal variable expected (Нужна переменная порядкового типа). 105 INLINE error (Ошибка в операторе INLINE) 106 Character expression expected (Предшествующее выражение должно иметь символьный тип). 107 Too many relocation items (Слишком много перемещаемых элементов). 108 Overflow in arithmetic operator (Переполнение при выполнении арифметического оператора). 109 No enclosing FOR, WHILE or REPEAT statement (Нет операторов, заканчивающих операторы FOR, WHILE или REPEAT). 110 Debug information table overflow (Переполнение информационной таблицы отладки) 111 N/A 112 CASE constant out of range (Константа CASE нарушает допустимые границы) . 113 Error in statement (Ошибка в операторе). 114 114 Cannot call an interrupt procedure (Невозможно вызвать процедуру npерывания). 115 N/A 116 Must be in 8087 mode to compile this (Для компиляции необходим режим 8087). 117 Target address not found (Указанный адрес не найден). 118 118 Include files are not allowed here (Здесь не допускаются включаемые файлы). 119 No inherited methods are accessible here (В этом месте программы нет унаследованных методов). 120 N/A 121 Invalid qualifier (Неверный квалификатор). 122 Invalid variable reference (Недействительная ссылка на переменную). 123 Too many symbols (Слишком много символов). 124 Statement part too large (Слишком большой раздел операторов). 125 N/A 126 Files must be var parameters (Файлы должны передаваться как параметры-переменные). 127 Too many conditional symbols (Слишком много условных символов). 128 Misplaced conditional directive (Пропущена условная директива). 129 ENDIF directive missing (Пропущена директива ENDIF). 130 Error in initial conditional defines (Ошибка в условных определениях). 131 Header does not match previous definition (Заголовок не соответствует предыдущему определению). 132 Critical disk error (Критическая ошибка диска). 133 Cannot evaluate this expression (Нельзя вычислить данное выражение). 134 Expression incorrectly germinated (Некорректное завершение выражения). 135 Invalid format specifier (Неверный спецификатор формата). 136 Invalid indirect reference (Недопустимая косвенная ссылка). 137 Structured variable are not allowed here (Здесь нельзя использовать переменную структурного типа). 138 Cannot evaluate without System unit (Нельзя вычислить выражение без мо-дуля SYSTEM). 139 Cannot access this symbol (Нет доступа к данному символу). 140 Invalid floating-point operation (Недопустимая операция с плавающей запятой). 141 Cannot compile overlay to memory (Нельзя выполнить компиляцию оверлейных модулей в память). 142 Procedure or function variable expected (Должна использоваться перемен- ная процедурного типа). 143 Invalid procedure or function reference (Недопустимая ссылка на процедуру или функцию) . 144 Cannot overlay this unit (Этот модуль не может использоваться в качестве оверлейного). 145 Too many nested scopes (Слишком много вложений). 146 File access denied (Отказано в доступе к файлу). 147 Object type expected (Здесь должен быть тип OBJECT) . 148 object types are not allowed (Нельзя объявлять локальные объекты). 149 VIRTUAL expected (Пропущено слово VIRTUAL). 150 Method identifier expected (Пропущен идентификатор инкапсулированного правила). 151 Virtual constructor are not allowed (Конструктор не может быть виртуальным). 153 Destructor identifier expected (Пропущен идентификатор деструктора). 154 Fail only allowed within constructor (Обращение к стандартной процедуре FAIL может содержаться только в конструкторе). 155 Invalid combination of opcode and operands (Недопустимая комбинация кода команды и операндов). 156 Memory reference expected (Отсутствует адрес). 157 Cannot add or subtract relocatable symbols (Нельзя складывать или вычитать перемещаемые символы). 158 Invalid register combination (Недопустимая комбинация регистров). 159 286/287 instructions are not enabled (Недоступен набор команд микропроцессоров 286/287). 160 Invalid symbol reference (Недопустимая ссылка на символ). 161 Code generation error (Ошибка генерации кода). 162 ASM expected (Отсутствует зарезервированное слово ASM).

«Формат данного пути не поддерживается».


В моем веб-сервисе есть следующий код:

string str_uploadpath = Server.MapPath("/UploadBucket/Raw/");
FileStream objfilestream = new FileStream(str_uploadpath +
                fileName, FileMode.Create, FileAccess.ReadWrite);

Может ли кто-нибудь помочь мне решить проблему с этим сообщением об ошибке из строки 2 кода.

Формат данного пути не поддерживается.

Разрешение на папку установлено на полный доступ для всех, и это фактический путь к папке.

Точка останова дала мне значение str_uploadpathas C:\webprojects\webservices\UploadBucket\Raw\.

Что не так с этой строкой?




Ответы:


Вместо использования str_uploadpath + fileNameпопробуйте использовать System.IO.Path.Combine:

Path.Combine(str_uploadpath, fileName);

который возвращает строку.







Я вижу, что создатель обнаружил, что ошибка произошла при попытке сохранить имя файла с полным путем. На самом деле достаточно иметь ":"в имени файла, чтобы получить эту ошибку. Если это может быть ":"в имени вашего файла (например, если у вас есть отметка даты в имени файла), убедитесь, что вы заменили их чем-то другим. Т.е.:

string fullFileName = fileName.Split('.')[0] + "(" + DateTime.Now.ToString().Replace(':', '-') + ")." + fileName.Split('.')[1];




Для меня проблема заключалась в невидимом для человеческого глаза "‪" символе встраивания слева направо .
Он застрял в начале строки (непосредственно перед ‘D’) после того, как я скопировал путь из вкладки безопасности свойств файла Windows.

var yourJson = System.IO.File.ReadAllText(@"D:testjson.txt"); // Works
var yourJson = System.IO.File.ReadAllText(@"‪D:testjson.txt"); // Error

Так что эти, на первый взгляд одинаковые, две линии на самом деле разные.


Если вы пытаетесь сохранить файл в файловой системе. Path.Combine не является пуленепробиваемым, так как он не поможет вам, если имя файла содержит недопустимые символы. Вот метод расширения, который удаляет недопустимые символы из имен файлов:

public static string ToSafeFileName(this string s)
{
        return s
            .Replace("\", "")
            .Replace("/", "")
            .Replace(""", "")
            .Replace("*", "")
            .Replace(":", "")
            .Replace("?", "")
            .Replace("<", "")
            .Replace(">", "")
            .Replace("|", "");
    }

А использование может быть:

Path.Combine(str_uploadpath, fileName.ToSafeFileName());


Среди прочего, что может вызвать эту ошибку:

В полной строке PathFile не может быть определенных символов.

Например, эти символы приведут к сбою функции StreamWriter:

"/"  
":"

могут быть и другие специальные символы, которые тоже вызывают сбой. Я обнаружил, что это происходит, когда вы пытаетесь, например, поставить отметку DateTime в имя файла:

AppPath = Path.GetDirectoryName(giFileNames(0))  
' AppPath is a valid path from system. (This was easy in VB6, just AppPath = App.Path & "")
' AppPath must have "" char at the end...

DateTime = DateAndTime.Now.ToString ' fails StreamWriter... has ":" characters
FileOut = "Data_Summary_" & DateTime & ".dat"
NewFileOutS = Path.Combine(AppPath, FileOut)
Using sw As StreamWriter = New StreamWriter(NewFileOutS  , True) ' true to append
        sw.WriteLine(NewFileOutS)
        sw.Dispose()
    End Using

Один из способов предотвратить эту проблему — заменить проблемные символы в NewFileOutS на безопасные:

' clean the File output file string NewFileOutS so StreamWriter will work
 NewFileOutS = NewFileOutS.Replace("/","-") ' replace / with -
 NewFileOutS = NewFileOutS.Replace(":","-") ' replace : with - 

' after cleaning the FileNamePath string NewFileOutS, StreamWriter will not throw an (Unhandled) exception.

Надеюсь, это избавит кого-то от головной боли …!



Если вы получаете эту ошибку в PowerShell, скорее всего, это связано с тем, что вы используете Resolve-Pathдля разрешения удаленного пути, например

 Resolve-Path \serversharepath

В этом случае Resolve-Pathвозвращает объект, который при преобразовании в строку не возвращает допустимый путь. Он возвращает внутренний путь PowerShell:

> [string](Resolve-Path \serversharepath)
Microsoft.PowerShell.CoreFileSystem::\serversharepath

Решение состоит в том, чтобы использовать ProviderPathсвойство объекта, возвращаемого Resolve-Path:

> Resolve-Path \serversharepath | Select-Object -ExpandProperty PRoviderPath
\serversharepath
> (Resolve-Path \serversharepath).ProviderPath
\serversharepath

Попробуйте изменить:

Server.MapPath("/UploadBucket/Raw/")

к

Server.MapPath(@"UploadBucketRaw")




Это была моя проблема, которая может помочь кому-то другому, хотя это не было проблемой OP:

DirectoryInfo diTemp = new DirectoryInfo(strSomePath);
FileStream fsTemp = new FileStream(diTemp.ToString());

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

DirectoryInfo diTemp = new DirectoryInfo(strSomePath);
FileStream fsTemp = new FileStream(diTemp.FullName.ToString());

Помогает ли использование метода Path.Combine ? Это более безопасный способ объединения путей к файлам. Может быть, у него проблемы с соединением путей вместе


Я использую (ограниченный) построитель выражений для переменной для использования в простой задаче файловой системы для создания архива файла в SSIS.

Это мой быстрый и грязный прием по удалению двоеточий, чтобы остановить ошибку: @ [User :: LocalFile] + «-» + REPLACE ((DT_STR, 30, 1252) GETDATE (), «:», «-«) + «.xml»


Сегодня у меня была такая же проблема. Файл, который я пытался загрузить в свой код, был открыт для редактирования в Excel. После закрытия Excel код заработал!


Если значением является URL-адрес файла, например file: // C: / something, используйте класс Uri для преобразования в обычное имя файла:

var localPath = (new Uri(urlStylePath)).AbsolutePath

В общем, использование предоставленного API — это лучшая практика.

Среди прочего, которые могут вызвать эту ошибку:

У вас не может быть определенных символов в полной строке PathFile.

Например, эти символы приведут к сбою функции StreamWriter:

"/"  
":"

могут быть и другие специальные символы, которые тоже его терпят.
Я обнаружил, что это происходит, когда вы пытаетесь, например, поставить штамп DateTime в имя файла:

AppPath = Path.GetDirectoryName(giFileNames(0))  
' AppPath is a valid path from system. (This was easy in VB6, just AppPath = App.Path & "\")
' AppPath must have "\" char at the end...

DateTime = DateAndTime.Now.ToString ' fails StreamWriter... has ":" characters
FileOut = "Data_Summary_" & DateTime & ".dat"
NewFileOutS = Path.Combine(AppPath, FileOut)
Using sw As StreamWriter = New StreamWriter(NewFileOutS  , True) ' true to append
        sw.WriteLine(NewFileOutS)
        sw.Dispose()
    End Using

Один из способов предотвратить эту проблему — заменить проблемные символы в NewFileOutS на доброкачественные:

' clean the File output file string NewFileOutS so StreamWriter will work
 NewFileOutS = NewFileOutS.Replace("/","-") ' replace / with -
 NewFileOutS = NewFileOutS.Replace(":","-") ' replace : with - 

' after cleaning the FileNamePath string NewFileOutS, StreamWriter will not throw an (Unhandled) exception.

Надеюсь, это избавит кого-то от головных болей…!

Понравилась статья? Поделить с друзьями:
  • Ошибка времени выполнения индекс находился вне границ массива
  • Ошибка времени выполнения входная строка имела неверный формат
  • Ошибка времени выполнения stackoverflowexception
  • Ошибка вольво se8701 11
  • Ошибка времени выполнения basic объектная переменная не установлена