Re: покластерная запись в файл
От: Pavel Dvorkin Россия  
Дата: 15.10.04 06:10
Оценка:
Привет!

RedHair wrote:
>
> У меня следующая проблема.
> Создаю файл — CreateFile(). Записываю в него некоторые данные, которые представляют собой строки в ANSI — WriteFile(). Это происходит на диске с размером кластера 4кб.

Мимоходом маленькое замечание. WriteFile не знает никаких строк в ANSI,
она только записвает байты. Уверен, что здесь все в порядке ?

> Далее копирую этот файл (xcopy) из командной строки на диск с размером кластера 512б.

> Файл сильно фрагментируется. Мои текстовые фразы разрываются.
> В итоге, когда я пытаюсь физически (открывая диск все тем же CreateFile()) на диске найти эти фразы — они не ищутся.

Этого не может быть, потому что это противоречит основным принципам.
Почему — об этом достаточно написал Alex Alexandrov, повторяться не
буду. Насчет того, что ты не можешь найти свои фразы

1. Проверь, есть ли они в оригинале.
2. Сравни оригинал и копию —

C:> fc original.txt copy.txt (если файлы текстовые)

C:> fc original.dat copy.dat /B (если файлы двоичные)


>Примечание: если создавать файл заново (например в проводнике), и копировать туда содержание

исходного файла — все прекрасно ищется?

Это как так ? Создавать файл в проводнике и после этого копировать туда
содержимое ? Я такого в проводнике делать не умею. Проводник просто
копирует файл, затирая прежний файл.


>

> Вопрос:
> 0. могут ли фразы в исходном файлек не искаться не из-за дефрагментации, а по другим причинам?

Могут. Причина одна — записал не то

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


Кластеры тебя волновать не должны. Работа с кластерами АБСОЛЮТНО
ПРОЗРАЧНА для приложений, их не касается, какие кластеры выделяются.
Содержимое файла от расположения кластеров не зависит.

> 2. если нельзя добиться п1 — как сделать дефрагментацию?


Не стоит. Лучше ищи ошибку у себя.

--
With best regards,
Pavel Dvorkin
Posted via RSDN NNTP Server 1.9 gamma
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.