Чому псується текстовий файл software - сторінка 2

Взагалі-то мене більше цікавить питання: чому у мене файл зіпсувався без будь-яких видимих ​​причин? Причому зіпсувався тільки один файл з 4-х задіяних у цій програмі, інші три файли цілком нормальні і до сих пір не зіпсувалися. Чи не зіпсувався і файл A17.txt, куди я переписала дані з зіпсованого файлу A16.txt.
До сих пір кручу цю програму і все нормально працює, всі файли в порядку.

Таке абсолютно непередбачуване і незрозуміла поведінка дуже сумно.
Уявіть собі: запускаю я програму і чекаю результатів, а результатів немає і годину, і два і добу. І виявляється причина в тому, що сам собою захотів зіпсуватися один з файлів, що містять вихідні дані для програми. І про це ж ніде не повідомляється, що він зіпсувався!
Доведеться вводити в програму луна-контроль, щоб програма вивела на екран всі вихідні дані, які вона отримала з зовнішніх файлів.

Скачала зіпсований файл A16.txt з Яндекс.Діск і ще раз виконала процедуру зміни кодування на ANSI.
Показую всі етапи, в збереженому файлі A76.txt з новим кодуванням ANSI я бачу одні питання.

Чому псується текстовий файл software - сторінка 2

Відкрила файл A16.txt в Блокноті (використовуючи Блокнот -> Відкрити файл)

Чому псується текстовий файл software - сторінка 2

Зберегла як новий файл A76.txt, вибравши кодування ANSI:

Чому псується текстовий файл software - сторінка 2

Відкрила новий файл A76.txt в Блокноті.

До речі, файл A76.txt навіть в WordPad відкривається так само: одні питання.

Взагалі-то мене більше цікавить питання: чому у мене файл зіпсувався без будь-яких видимих ​​причин? Причому зіпсувався тільки один файл з 4-х задіяних у цій програмі, інші три файли цілком нормальні і до сих пір не зіпсувалися. Чи не зіпсувався і файл A17.txt, куди я переписала дані з зіпсованого файлу A16.txt.

Файл не псувався. Просто Блокнот його неправильно показує (Ви в цьому і самі переконувалися, відкриваючи файл Wordpad'ом). Причину я вже вказував:

Причина в неадекватній поведінці WinAPI-шной функції IsTextUnicode. яка використовується Блокнотом для автоматичного визначення кодування в файлах без BOM.

Тобто якщо на початку файлу не знайдений BOM Byte Order Mark (символ кодування Unicode, призначений для індикації порядку байт), то Блокнот використовує функцію, яка намагається по послідовності байт файлу визначити, в якому кодуванні (Unicode чи ні) знаходиться текст в ньому. Іноді (досить рідко, треба зауважити для справедливості), як у випадку Вашого файлу, ця функція вважає, що що файл кодований в Unicode, хоча насправді це не так.

Показую всі етапи, в збереженому файлі A76.txt з новим кодуванням ANSI я бачу одні питання.

Ваша помилка в тому, що Ви намагаєтеся зберегти неправильно відкритий файл в кодуванні ANSI. А треба його відкрити в ANSI. Тобто вибрати кодування ANSI в діалозі вибору файлу ( "Відкрити як.").
Відкрийте Блокнот, натисніть Ctrl + O (або Файл Відкрити.), В діалозі відкриття файлу виберіть його ім'я і кодування ANSI, натисніть "Відкрити".

Взагалі-то мене більше цікавить питання: чому у мене файл зіпсувався без будь-яких видимих ​​причин? Причому зіпсувався тільки один файл з 4-х задіяних у цій програмі, інші три файли цілком нормальні і до сих пір не зіпсувалися. Чи не зіпсувався і файл A17.txt, куди я переписала дані з зіпсованого файлу A16.txt.

Файл не псувався. Просто Блокнот його неправильно показує (Ви в цьому і самі переконувалися, відкриваючи файл Wordpad'ом).


Добре, файл не зіпсувався.
Тоді таке питання: програма вводить вихідні дані з цього файлу правильно? Вона розуміє, що це такі-то числа, а не китайські ієрогліфи?
Я можу це зараз перевірити, введу в програму луна-контроль і подивлюся, що вона отримує з цього файлу з ієрогліфами.

Файл у мене зіпсувався з самого початку і сам по собі.

Як ви це визначили?


Так я ж начебто описала. Перервала програму і перевірила всі 4 файлу з вихідними даними, природно, відкривши їх у Блокноті (як завжди роблю). Побачила в 3-х файлах правильні числа, а в четвертому файлі побачила ієрогліфи. Окуда взялися ієрогліфи, якщо я записала в файл числа (записувала я їх вручну)?

Це бага блокнота, причому не будь-який версії.

Наскільки я розумію, будь-хто. Тобто принципово алгоритм в Vista / 7/8 не змінювався в порівнянні з XP і більш старими версіями (раз баг все одно спливає). Просто якимось чином відключили його прояв на коротких текстових рядках (на кшталт "this app can break" і т.п.). Я вважаю, що відрубавши автоопределение Unicode для файлів коротше 128 байт.

Файл у мене зіпсувався з самого початку і сам по собі.

Файл не псувався!

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

Зрозуміло, тільки один. Така поведінка і має бути рідкістю, інакше Microsoft б уже давно завалили скаргами.

Мені в даний момент, коли я виявила, що файл зіпсувався, вже не має сенсу змушувати його відкритися правильно.

А даремно. Все-таки спробуйте, і Ви здивуєтеся.

Я просто видаляю зіпсований файл і записую дані в новий файл.

І що виходить?

Так я ж начебто описала. Перервала програму і перевірила всі 4 файлу з вихідними даними, природно, відкривши їх у Блокноті (як завжди роблю).

Таким чином ви могли наткнуться на помилку в Блокноті. Як ви переконалися, що саме файл зіпсувався, а не Блокнот помилився?


Чому Блокнот помилився лише в одному з 4-х файлів (всі 4 файлу однотипні і були створені вручну)?

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

Я просто видаляю зіпсований файл і записую дані в новий файл.

І що виходить?


Ви змушуєте мене повторювати одне й те саме. Здається, я вже писала, що записавши дані в новий файл A17.txt, я до сих пір працюю з цією програмою і з даними файлами і нічого поки не зіпсувався, все нормально працює.

Схожі статті