Подвисшие файлы
Вы уже немного познакомились с файлами, а в разд. 4.2 даже попробовали создать файл на удаленной машине и записать в него данные. Теперь посмотрим, как можно превратить работу с файлами в небольшую шалость.
Вспомните, как формируется сетевой путь:
\\Имя компьютера\диск\путь
Если нужно обратиться к локальному диску как сетевому, и при этом диск не является открытым, то после имени диска необходимо поставить знак $. Например, чтобы получить доступ к файлу myfile.txt на диске С:, нужно написать следующий путь:
\\MyComputer\C$\myfile.txt
Теперь самое интересное. В Windows нельзя создавать файлы с именами, содержащими знак ?, и проверка на такой знак делается на уровне ОС. Но если обращаться к файлу по сети, то проверка не выполняется. Если у вас есть сеть, то подключите любой сетевой диск другого компьютера. Допустим, что этому диску будет назначена буква е:. Теперь, если выполнить код из листинга 5.7, то программа зависнет, и снять ее будет невозможно.
Листинг 5.7. Создание неправильного файла по сети |
// Write to file 9 symbols if (WriteFile(FileHandle, "Test line", 9, BWritten, NULL)== 0) { MessageBox(0, "Write to file error", "Error",0); return; }
// Close file CloseHandle(FileHandle);
В листинге 5.7 я пытался создать файл и записать в него 9 символов, как и в разд. 4.2. Но имя файла написано неверно (присутствует символ ?), поэтому создание невозможно, а проверка на недопустимый символ отсутствует. Именно поэтому программа зависает в ожидании ответа от ОС, которого не будет.
Примечание |
Исходный код примера, описанного в этом разделе, вы можете найти на компакт - диске в каталоге \Demo\Chapter5\TestFile. |