Iが約SharpZipLib
を使用してファイルを解凍する方法を検索する場合、私はこのような方法の多くを発見したが:FileStreamの記述とは何が違うのですか?
public static void TarWriteCharacters(string tarfile, string targetDir)
{
using (TarInputStream s = new TarInputStream(File.OpenRead(tarfile)))
{
//some codes here
using (FileStream fileWrite = File.Create(targetDir + directoryName + fileName))
{
int size = 2048;
byte[] data = new byte[2048];
while (true)
{
size = s.Read(data, 0, data.Length);
if (size > 0)
{
fileWrite.Write(data, 0, size);
}
else
{
break;
}
}
fileWrite.Close();
}
}
}
フォーマットFileStream.Write
である:
FileStream.Write(バイト[]配列int offset、int count)
今、私は書き込み機能で伸張率を上げるためにスレッドを使用したいので、読み込みと書き込みの部分を分けようとしています。私は動的配列
public static void TarWriteCharacters(string tarfile, string targetDir)
{
using (TarInputStream s = new TarInputStream(File.OpenRead(tarfile)))
{
//some codes here
using (FileStream fileWrite= File.Create(targetDir + directoryName + fileName))
{
int size = 2048;
List<int> SizeList = new List<int>();
List<byte[]> mydatalist = new List<byte[]>();
while (true)
{
byte[] data = new byte[2048];
size = s.Read(data, 0, data.Length);
if (size > 0)
{
mydatalist.Add(data);
SizeList.Add(size);
}
else
{
break;
}
}
test = new Thread(() =>
FileWriteFun(pathToTar, args, SizeList, mydatalist)
);
test.Start();
streamWriter.Close();
}
}
}
書き込み::whileループに
public static void FileWriteFun(string pathToTar , string[] args, List<int> SizeList, List<byte[]> mydataList)
{
//some codes here
using (FileStream fileWrite= File.Create(targetDir + directoryName + fileName))
{
for (int i = 0; i < mydataList.Count; i++)
{
fileWrite.Write(mydataList[i], 0, SizeList[i]);
}
fileWrite.Close();
}
}
編集
(1)
byte[] data = new byte[2048]
読む以下のようにファイルのデータおよびサイズを堆積する
byte[]
とint[]
新しい配列にデータを割り当てる。(2)
List<int> SizeList = new List<int>()
に変更int[] SizeList = new int[2048]
を理由int型の範囲の
まず、 'StreamWriter'ではなく' Stream'であるときに変数 'streamWriter'を呼び出すのはかなり混乱します。私は強く 'ストリーム'と呼ぶことを強くお勧めしたいと思います。しかし、私は非常に多くの問題は、あなたが別のスレッドでそれを書き込もうとしている間にあなたのストリームを "メイン"スレッドで閉じていることです。 –
ああ、それは本当です、私はあなたの推薦で編集します、ありがとうございます。 – Peter
IOのためにこのようなスレッドを使用すると、処理が遅くなってバグが発生する可能性があります。 IOには1つのスレッドを使用します。 – Enigmativity