Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для sasha0192
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449

Недозапись сектора FileStream

16.04.2013, 22:49. Показов 829. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет !
Нужна помощь !

Проблема следующая - цикл недозаписывает сектора на диск.

C#
1
2
3
4
5
6
7
// StatusSektors указывает сколько секторов нужно записать
                for (int i = 1; i <= StatusSektors + 1; i++)
                {
                    WriteBlock(WriteRead, DataWrite1, i);
                    long Posits = (WriteRead.Position) / 515; // Получаю текущую позицию записываемого сектора
                    label8.Text = Posits + "";
                }
Так вот, все время то недозаписывает то перезаписывает на несколько секторов вперед.
В чем дело ?

Может задержу нужно ставить или что-то проверять, например проверять записал сектор или нет?
Бывает пишет, что сектор записал а когда проверяешь то сектор пуст... странно...
Буду благодарен за помощь!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.04.2013, 22:49
Ответы с готовыми решениями:

FileStream.Close(), FileStream.Dispose() - что использовать?
Здравствуйте! Использую в программе объект типа FileStream. Когда он становится ненужен, закрываю его методом Close(). Достаточно ли...

Разбить область на сектора. Цвет нарисованной линии должен зависеть от сектора
Форма делится на сектора (их количество задает пользователь). Курсором мыши можно рисовать линии. Цвет линии зависит от сектора. При...

Переназначенные сектора, нестабильные сектора и неисправимые ошибки секторов
Решил я как то проверить с помощью Crystal Disk Info и на те сразу три ошибки. Насколько это опасно и можно ли их исправить?

2
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8726 / 3678 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
17.04.2013, 03:34
Цитата Сообщение от sasha0192 Посмотреть сообщение
/ 515
Это что еще такое? Это у Вас такой размер кластера (сектора??)?

Почитайте темы, там довольно много обсуждений на счет перезаписи данных на диске и затирания файлов
Перезаписать кластера занятые файлом
Работа с жёстким диском
0
 Аватар для sasha0192
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449
17.04.2013, 08:56  [ТС]
SSTREGG, Это что еще такое? Это у Вас такой размер кластера (сектора??)?
WriteRead.Position как я понял указывает позицию записанных байтов, чтобы узнать какой сектор записал я поделил все на 512, в результате получил число записанных секторов.

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

Одни словом - Нестабильно.



C#
1
2
3
// Открываю диск
                handle = CreateFile("\\\\.\\" + comboBox1.Text.Substring(0, 2), GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
                WriteRead = new FileStream(handle, FileAccess.ReadWrite);
C#
1
2
3
4
5
6
7
//Записываю сектор в 512 байт
// StatusSektors указывает сколько секторов нужно записать
                for (int i = 1; i <= StatusSektors + 1; i++)
                {
                    WriteBlock(WriteRead, DataWrite1, i);
                    long Posits = (WriteRead.Position) / 515; // Получаю текущую позицию записываемого сектора
                }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// Тут не чего особенного, из массива string 32, 128 получаю байты 
// (построчно собираю из 128 элементов массива, 16 байт. В итоге 512 байт на запись) не обращайте внимания
        // WriteBlock(FileStream, 512 byte string, int позиция);
        private static void WriteBlock(FileStream WriteRead, string[,] DataWrite, int Sektors)
        {
            byte[] ByteData = new byte[512];
            int Counter = 0;
            for (int Row = 0; Row < 32; Row++)
            {
                string Data = "";
                int PositCow = 0;
                for (int Cow = 0; Cow < 16; Cow++)
                {
                    Data = "";
                    int Posit = 0;
                    for (Posit = 0; Posit <= 7; Posit++)
                    {
                        Data = Data + DataWrite[Row, PositCow + Posit];
                    }
                    PositCow = PositCow + Posit;
                    ByteData[Counter] = Convert.ToByte(Convert.ToInt32(Data, 2));
                    Counter++;
                }
            }
            WritesByte(WriteRead, ByteData, Sektors);
        }
 
        // Writes(FileStream, 512 byte, позиция);
        private static void WritesByte(FileStream WriteRead, byte[] Data, int Posit)
        {
            WriteRead.Position = Posit * 512;
            WriteRead.Write(Data, 0, 512);
        }
Добавлено через 20 минут
Хех кажись понял, при записи бывает в холостую работает. (говорит что сектор записал, а сам не записал )
C#
1
WriteBlock(WriteRead, DataWrite1, i);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.04.2013, 08:56
Помогаю со студенческими работами здесь

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

Чем и как определить битые сектора и (чем и как) разбить HDD на разделы, игнорируя (оставляя в не размеченных зонах) битые сектора?
Помнится, однажды (лет 7 назад) делал подобное с переносным диском. Тогда из 80 удалось сохранить 60 гб. создав три логические. При этом 8...

Буфер FileStream
Читаю книгу &quot;Сетевое программирование для профессионалов&quot;, 2005 года. В книге говорится о том что при создании потока FileStream ему по...

Наследование от IO.Filestream
public class Element : FileStream { public string Key { get; set; } public string FileNameFrom { get;...

Потокобезопасность, FileStream
пускаю потоки на выполнение этого метода: ... for (int b = 0; b &lt; fs.Length/10; b += 4) { fs.Seek(Convert.ToInt32(part) +...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru