Witam wszystkich. Dosyć długi i obszerny temat..
A więc na początek: zbudowałem dwie metody, jedna służy do dzielenia a druga do scalania plików.
Metody działają dobrze, więc jeśli ktoś chce może sobie poniższy kod "pożyczyć":
Metoda do dzielenia plików: przyjmuje:
-pełną nazwę pliku (np: C:\folder\plik.exe);
-folder, gdzie mają być zapisane części (np: C:\folder);
-na ile MB ma być podzielony plik (np: 4)
Części są zapisywane następująco: plik.exe >> part1: plik.exe.part1.fs itd.
private void SplitFile(string fullname, string wheresave, int whatMB)
{
try
{
Stream inputStream;
Stream localStream;
long whatKB = whatMB * 1024;
string localFilename;
FileInfo file = new FileInfo(fullname);
long size = file.Length / 1024;
long parts = size / whatKB + 1;
inputStream = File.OpenRead(file.Name);
byte[] buffer = new byte[1024];
int bytesRead;
for (int a = 1; a < parts + 1; a++)
{
localFilename = wheresave + @"\" + file.Name + ".part" + a + ".fs";
localStream = File.Create(localFilename);
for (int b = 0; b < whatMB * 1024; b++)
{
bytesRead = inputStream.Read(buffer, 0, buffer.Length);
localStream.Write(buffer, 0, bytesRead);
}
localStream.Close();
}
inputStream.Close();
}
catch
{
MessageBox.Show("Error!");
return;
}
MessageBox.Show("OK");
}
Metoda do scalania plików. Przyjmuje:
-pełną nazwę pierwszej części pliku (NP: C:\folder\plik.exe.part1.fs);
-folder, gdzie ma być zapisany plik wyjściowy (np: C:\folder);
private void MergeFile(string firstfile, string wheresave)
{
try
{
FileInfo file = new FileInfo(firstfile);
DirectoryInfo directory = new DirectoryInfo(file.DirectoryName);
Stream inputStream;
Stream localStream;
string filename = "";
string localFilename;
byte[] buffer = new byte[1024];
int bytesRead;
Regex theRegex = new Regex(@"(?<filename>((\S|\s|\d)+).((\S|\d)+)).part\d+.fs");
MatchCollection theMatches = theRegex.Matches(file.Name);
foreach (Match thematch in theMatches)
filename = thematch.Groups["filename"].ToString();
FileInfo[] files = directory.GetFiles("*.part*.fs");
int parts = 0;
foreach (FileInfo x in files)
parts++;
localFilename = wheresave + @"\" + filename;
localStream = File.Create(localFilename);
for (int a = 1; a < parts + 1; a++)
{
inputStream = File.OpenRead(directory.FullName + @"\" + filename + ".part" + a + ".fs");
do
{
bytesRead = inputStream.Read(buffer, 0, buffer.Length);
localStream.Write(buffer, 0, bytesRead);
} while (bytesRead > 0);
inputStream.Close();
}
localStream.Close();
}
catch
{
MessageBox.Show("Error!");
return;
}
MessageBox.Show("OK");
}
Pytanie nr1:
Jak zmodyfikować ten kod, ażeby podczas dzielenia plików zapisana została informacja o liczbie części, hash crc32, jak sprawdzić potem która część jest prawidłowa, a która jednak nie?
Pytanie nr2:
Do czego służy metoda GetHashCode?
Pytanie nr3:
Jak najłatwiej i najbezpieczniej zaszyfrować wiadomość za pomocą C#? (pojedyncze litery, ale także całe wyrazy i zdania (a może i pliki)?)
dzięki za odpowiedź ;-)