C#032戦闘:ファイル読み込みと進捗状況を表示するには、ファイルを読み書き
コンソールプログラム転送ファナックを書くとき、私はPythonのコール・インタフェースを使用してファイルを転送するとき、あなたは常に読み取りにどのように多くの文書がわからない問題を発見する前に、どのくらいの読み取りが完了する前に、常に考えてプログラムに従事し始めましたハングアップし、簡単に閲覧転送の進行状況のために、今日我々は、ファイルを読み書きするプログレスバーを作成し、ここでダイナミックなプレゼンテーションチャートです。
ツール/材料
-
C#の
方法/ステップ
-
1
まず、ソースファイルのパスを定義し、ファイル名を取得した後、ストレージ・パスを開発し、それはすでに我々はそれを削除します(存在する場合)、抽出されたファイル名を比較したファイルのパス名を取得します。
文字列のファイルパス= @ "E:Adobe PhotoshopのCS6.zip \"。
文字列filename = Path.GetFileName(ファイルパス)。
文字列SAVEDIR = @ "E:\ UG"。
文字列関数savepath = SAVEDIR + "\\" +ファイル名。
DirectoryInfo SP =新しいDirectoryInfo(これは意味)。
FileSystemInfo [] = Fiのsp.GetFileSystemInfos()。
foreachの(FIでFileSystemInfo I)
{
もし(i.Name ==ファイル名)
{
i.Delete();
}
}
-
2
ここでは、ファイルがフローを定義読み取りと書き込みを開始し、ファイルサイズを取得し、我々はいくつかの読み取りに以下の変数を定義し、それぞれの長さの位置、および残りの読み取りサイズの読み取りを記録します。
FileStream fsの=新しいFileStreamを(ファイルパス、FileMode.OpenOrCreate、FileAccess.Read)。
FileStream WR =新しいFileStreamを(関数savepath、FileMode.OpenOrCreate、FileAccess.Write)。
長い数= fs.Length; //ファイルの長さ
int start = 0;//开始读取
int num = 0; //每次读取的长度
long end = count;//剩余读取长度
double prePercent = 0;//进度条
-
3
现在我们来绘制进度条背景,我们设置进度条 长度为50,颜色为绿色,直接打印空格填充背景即可。
ConsoleColor colorBack = Console.BackgroundColor;
ConsoleColor colorFore = Console.ForegroundColor;
if (count > 0)
{
//绘制读条背景界面
Console.WriteLine("********************* Loading *********************");
Console.BackgroundColor = ConsoleColor.DarkCyan;//设置背景色
for (int i = 0; ++i <= 50; )
{
Console.Write(" ");//打印空格
}
Console.WriteLine(" ");
Console.BackgroundColor = colorBack;//还原背景色
Console.WriteLine("0%");
Console.WriteLine("***************************************************");
}
-
4
接下来我们开始实现读写功能,获取文件的开始位置,判断下剩余文件大小,如果不足一个bytes空间,则num等于实际剩余空间大小,否则就以每个bytes大小传输,直到剩余大小为0结束,同时我们进行写入操作,将文件分段写入到指定文件目录中去。
while (end > 0)
{
fs.Position =始めます。
もし(エンド<MAXLENGTH)
NUM = fs.Read(バイト0、Convert.ToInt32(終了)); //ファイルを読み取ります
他
NUM = fs.Read(バイト、0、MAXLENGTH); //ファイルを読みます
wr.Write(バイト、0、NUM); //ファイルに書き込みます
(NUM == 0)の場合
ブレーク;
NUM = +開始。
エンド - = NUM;
}
fs.Close();
wr.Close();
fs.Dispose();
Console.WriteLineを( "読書が完成!");
Console.ReadLine();
}
-
5
これは、我々は転送のサイズを記録するたびに見ることができるデータは、上記のコードから提示された各時間を読んでいないので、我々は、読み取りと書き込みの進行状況が表示されていないものを、数は我々が残っているどのくらいの、送信されてきたです今知っているし、我々は、ファイルサイズと値の転送の合計サイズは、ファイル転送、我々はすべての時間の割合を得るために、計算された使用、および表示されるプログレスバーにそれを描きます。
-
6
我々は、送信の値を計算し、その後、100パーセントと丸いMath.Ceiling(パーセント×100)の点で得られた端数を乗じ、次のステップは、プログレスバーを更新することで、上記のように、我々は、背景色、カーソルの動きを定義します我々は、トランスミッションの割合に移動します。
-
7
最後に、ファイルストリームをクローズすることを忘れないでください、またはファイルが書き込まれたときにエラーが覚えている、(ファイルの中身の少ないバイトを使用することができない、エラーにつながる)が発生します。