Public feed
#378520
public virtual void importImgfs(FileInfo imgFile)
{
FileStream osf = null;
FileStream img = null;
Console.WriteLine("...Importing ImageFS");
if (OsFile == null)
return;
try
{
long position = guessBestPositionStart();
long end = SupportClass.FileLength(OsFile);
long size = end - position;
osf = SupportClass.RandomAccessFileSupport.CreateRandomAccessFile(OsFile, "rw");
img = new FileStream(imgFile.FullName, FileMode.Open, FileAccess.Read);
long addCount = getImgfsStartBlock();
byte[] endByte = { 255, 255, 251, 255 };
byte[] bytes2 = new byte[512];
byte[] byteFF = new byte[520];
for (int i = 0; i < 520; i++)
byteFF[i] = 255;
long actualPositionStart = position - getImgfsShiftBlock() * 520L;
for (long fillpos = actualPositionStart; fillpos < position; fillpos += 520L)
{
osf.Seek(fillpos, SeekOrigin.Begin);
osf.Write(byteFF, 0, byteFF.Length);
}
long ccc = (getContentEnd(imgFile, position, imgFile.Length, 512) * 520L) / 512L + guessBestPositionStart();
for (long j = 0L; j < size; j += 520L)
{
long currentPos = position + j;
if (currentPos < ccc)
{
img.Read(bytes2, 0, bytes2.Length);
osf.Seek(currentPos, SeekOrigin.Begin);
osf.Write(bytes2, 0, bytes2.Length);
byte[] temp = SupportClass.ToByteArray( decimalToBlkNum(addCount) );
osf.Write(temp, 0, temp.Length);
osf.Write(endByte, 0, endByte.Length);
if (j % 0x1fbd00L == 0L)
Console.Write(".");
addCount++;
}
else
osf.Write(byteFF, 0, byteFF.Length);
}
Console.WriteLine("...done! (size: {0})", Convert.ToInt32(size));
}
catch (Exception e)
{
Console.Write("...Error: {0}", e.Message);
}
if (osf != null)
osf.Close();
if (img != null)
img.Close();
}
private long getContentEnd(FileInfo imgFile, long position, long end, int testLength)
{
FileStream img = SupportClass.RandomAccessFileSupport.CreateRandomAccessFile(imgFile, "r"); ;
byte[] bytes = { 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,};
int skip = bytes.Length;
int remainTestLength = testLength - skip;
byte[] testByte = new byte[skip];
byte[] byte2 = new byte[remainTestLength];
byte[] testByte2 = new byte[remainTestLength];
for (int i = 0; i < remainTestLength; i++)
byte2[i] = 255;
for (long j = testLength; j < end; j += testLength)
{
img.Seek(j, SeekOrigin.Begin );
Console.WriteLine(j);
img.Read(testByte, 0, testByte.Length);
if ( bytes.Equals(testByte) )
{
img.Read(testByte2, 0, testByte2.Length);
if (byte2.Equals(testByte2))
{
long k = 0L;
do
{
img.Read(testByte, 0, testByte.Length);
img.Read(testByte2, 0, testByte2.Length);
k += testLength;
if (k >= end)
return j;
}
while (k < end && bytes.Equals(testByte) &&
byte2.Equals( testByte2) );
}
}
}
return end;
}