Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Операционные системы > Операционные системы общие вопросы
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2012, 18:04   #1
aka.vatakats
Новичок
Джуниор
 
Регистрация: 26.04.2012
Сообщений: 9
По умолчанию Алгоритм дефрагментации

Помогите пожалуйста переделать программу. У меня есть готовая программа.


Разработать алгоритм, производящий уплотнение файлов на диске при использовании метода цепочечного размещения файлов. Создать программу, реализующую данный алгоритм.
Входные данные программы:
Файл «fs.txt», содержащий три колонки данных, разделенных табуляцией: некий порядковый номер (по возрастанию), строку длиной 8 символов (или «0»), указатель (порядковый номер) другой строки (блока файла).
Пример:
……………….
1 IjRkd&4; 2
2 LMd$w;@f 0
3 KdLi4Md’ 6
4 0ePd4ldd 0
5 0 0
6 ,d:w4prd 4
……………….
И файл «mft.txt», содержащий три колонки: им файла, начальный блок файла, длину файла в блоках.
……………….
File A.txt 1 2
File B.doc 3 3
……………….
Программа должна:
1. Составить битовую таблицу свободных и используемых блоков.
2. Пронумеровать свободные блоки, запомнить их адреса (порядковые номера) и записать в файл «empty.txt» в виде:
……………….
[Номер блока по порядку] [Адрес блока]
……………….
3. Произвести уплотнение файлов. То есть на основании входных данных переместить блоки данных таким образом, чтобы блоки одного файла располагались последовательно. Информацию о пустом пространстве записать в конец выходного файла.
4. Воспроизвести в файл «out_fs.txt» итоги работы:
Пример:
……………….
1 IjRkd&4; 2
2 LMd$w;@f 0
3 KdLi4Md’ 4
4 ,d:w4prd 5
5 0ePd4ldd 0
6 0 0
……………….
И в файл «out_mft.txt» обновленную информацию о расположении файлов (в данном примере не изменится).
aka.vatakats вне форума Ответить с цитированием
Старый 26.04.2012, 18:04   #2
aka.vatakats
Новичок
Джуниор
 
Регистрация: 26.04.2012
Сообщений: 9
По умолчанию

У меня есть программа, но в этой программе идет цепочечное размещение файлов. Помогите переделать в непрерывное перемещение




using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace Лаба2
{
class Program
{
static void Main(string[] args)
{

String textfs = File.ReadAllText("fs.txt");
String textmft = File.ReadAllText("mft.txt");
Char[] r = { '\r', '\n' };//массив разделителей
String[] fs1 = textfs.Split(r, StringSplitOptions.RemoveEmptyEntri es);//разбиваем строку
String[,] fs = new string[fs1.Length, 3];
StreamWriter bitmap = new StreamWriter("bitmap.txt");
StreamWriter empty = new StreamWriter("empty.txt");
Console.WriteLine("Начинаем работать...");
String[] c = new String[10000];
String[] b = new String[100];
int cint = 0;
int q = 1;
int q1 = 1;
for (int i = 0; i < fs1.Length; i++)
{
String[] fs3 = fs1[i].Split('\t');//разбиваем строку по значениям
//--------------------------//
for (int j = 0; j < 3; j++)
{
fs[i, j] = fs3[j];//двумерная таблица
}
if (fs[i, 1].Equals("0"))//добавляем данные в битовую таблицу и в таблицу пустых мест
{
bitmap.WriteLine(q.ToString() + "\t" + "0");
q++;
empty.WriteLine(q1.ToString() + "\t" + fs[i, 0]);
q1++;
}

else
{
bitmap.WriteLine(q.ToString() + "\t" + "1");
q++;
}
}
Console.WriteLine("Составляю битовую таблицу...");
bitmap.Close();
empty.Close();
String[] mft1 = textmft.Split(r, StringSplitOptions.RemoveEmptyEntri es);
String[,] mft = new string[mft1.Length, 3];
double space = 0;
String[] name = new String[100000];
for (int i = 0; i < mft1.Length; i++)
{
String[] mft3 = mft1[i].Split('\t');

for (int j = 0; j < 3; j++)
{
mft[i, j] = mft3[j];


}
name[i] = mft[i, 0];


}

StreamWriter out_fs = new StreamWriter("out_fs.txt");
StreamWriter out_mft = new StreamWriter("out_mft.txt");
Console.WriteLine("Идет процесс Дефрагментации...");
q = 1;
for (int i = 0; i < mft1.Length; i++)//дефрагментация диска
{
int ch = 0;
int nr = Int32.Parse(mft[i, 1]);
nr = nr - 1;
int t = 1;
while (ch != Int32.Parse(mft[i, 2]))
{
if (t != Int32.Parse(mft[i, 2]))
{
out_fs.WriteLine(q.ToString() + "\t" + fs[nr, 1] + "\t" + (q + 1).ToString());
c[cint] = c[cint] + "" + fs[nr, 1];
ch++;
q++;
nr = Int32.Parse(fs[nr, 2]) - 1;

t++;
}

else
{
out_fs.WriteLine(q.ToString() + "\t" + fs[nr, 1] + "\t0");
c[cint] = c[cint] + "" + fs[nr, 1];
cint++;
ch++;
q++;
nr = Int32.Parse(fs[nr, 2]) - 1;

}
}
q1 = q - Int32.Parse(mft[i, 2]);
out_mft.WriteLine(mft[i, 0] + "\t" + q1.ToString() + "\t" + mft[i, 2]);
}
Console.WriteLine("Записываю выходные данные...");
for (int i = 0; i < fs1.Length; i++)//дописываем 0 в out_fs
{
if (fs[i, 1].Equals("0"))
{
out_fs.WriteLine(q.ToString() + "\t0\t0");
q++;
}
}
out_fs.Close();
out_mft.Close();


}

}

}
aka.vatakats вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм дефрагментации aka.vatakats C# (си шарп) 1 26.04.2012 17:11
код программы дефрагментации любого диска под досом stydent 93 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 12 28.02.2012 11:13
Разработайте алгоритм методом пошаговой детализации и программу, реализующую этот алгоритм. iamhated Помощь студентам 1 15.01.2012 16:24
Разработайте алгоритм методом пошаговой детализации и программу, реализующую этот алгоритм iamhated Помощь студентам 1 14.01.2012 16:22