私はライターを使用している2つのケースがあります。なぜ変数FileStreamライターがnullですか?
private void downloadFile(Int32 fileNr)
{
FileStream writer = null;
m_currentFileSize = 0;
fireEventFromBgw(Event.FileDownloadAttempting);
FileInfo file = this.Files[fileNr];
FileInfo fileFirstDateTime = this.Files[0];
FileInfo fileLastDateTime = this.Files[19];
Int64 size = 0;
Byte[] readBytes = new Byte[this.PackageSize];
Int32 currentPackageSize;
System.Diagnostics.Stopwatch speedTimer = new System.Diagnostics.Stopwatch();
Int32 readings = 0;
Exception exc = null;
if (form1.checkBox1.Text == "Download satellite images")
{
LocalDirectorySettings(file, writer);
}
else
{
writer = new FileStream(this.LocalDirectory + "\\" + file.Name, System.IO.FileMode.Create);
}
HttpWebRequest webReq;
HttpWebResponse webResp = null;
try
{
webReq = (HttpWebRequest)System.Net.WebRequest.Create(this.Files[fileNr].Path);
webResp = (HttpWebResponse)webReq.GetResponse();
size = webResp.ContentLength;
}
catch (Exception ex) { exc = ex; }
m_currentFileSize = size;
fireEventFromBgw(Event.FileDownloadStarted);
if (exc != null)
{
bgwDownloader.ReportProgress((Int32)InvokeType.FileDownloadFailedRaiser, exc);
}
else
{
m_currentFileProgress = 0;
while (m_currentFileProgress < size && !bgwDownloader.CancellationPending)
{
while (this.IsPaused) { System.Threading.Thread.Sleep(100); }
speedTimer.Start();
currentPackageSize = webResp.GetResponseStream().Read(readBytes, 0, this.PackageSize);
m_currentFileProgress += currentPackageSize;
m_totalProgress += currentPackageSize;
fireEventFromBgw(Event.ProgressChanged);
try
{
writer.Write(readBytes, 0, currentPackageSize);
}
catch(Exception eee)
{
string myeee = eee.ToString();
}
readings += 1;
if (readings >= this.StopWatchCyclesAmount)
{
m_currentSpeed = (Int32)(this.PackageSize * StopWatchCyclesAmount * 1000/(speedTimer.ElapsedMilliseconds + 1));
speedTimer.Reset();
readings = 0;
}
}
speedTimer.Stop();
writer.Close();
webResp.Close();
if (!bgwDownloader.CancellationPending) { fireEventFromBgw(Event.FileDownloadSucceeded); }
}
fireEventFromBgw(Event.FileDownloadStopped);
}
この部分では、それは他の部分を行う場合、それは正常に動作しています:
if (form1.checkBox1.Text == "Download satellite images")
{
LocalDirectorySettings(file, writer);
}
else
{
writer = new FileStream(this.LocalDirectory + "\\" + file.Name, System.IO.FileMode.Create);
}
を、それがラインをやっている場合:それは素晴らしいです:
writer = new FileStream(this.LocalDirectory + "\\" + file.Name, System.IO.FileMode.Create);
しかし、私は変更していたら、チェックボックスをオンにして、IFの最初の部分を実行します。
LocalDirectorySettings(file, writer);
そして、これはLocalDirectorySettingsメソッドコードです:
LocalDirectorySettingsメソッド内ライターのインスタンスを持つ行があってもというpublic void LocalDirectorySettings(FileInfo file, FileStream writer)
{
try
{
var startIndex = file.Path.IndexOf("region=") + "region=".Length;
var length = file.Path.IndexOf("&", startIndex) - startIndex;
var code = file.Path.Substring(startIndex, length);
var countryName = form1.codeToFullNameMap[code];
string firstDT = ParseDateTime(this.Files[0]);
string lastDT = ParseDateTime(this.Files[19]);
string subDirectoryDT = firstDT + "---" + lastDT;
string countryPath = Path.Combine(form1.mainPath, countryName);
LocalDirectory = countryPath + "\\" + subDirectoryDT;
if (!Directory.Exists(LocalDirectory))
{
Directory.CreateDirectory(LocalDirectory);
}
string fileName = this.LocalDirectory + "\\" + "test.png"; //file.Name + "---" + countFilesNames++.ToString("D6") + ".png";
writer = new FileStream(fileName, System.IO.FileMode.Create); // Set a breakpoint here.
}
catch (Exception err)
{
string ggg = err.ToString();
}
}
:
writer = new FileStream(fileName, System.IO.FileMode.Create);
と私はブレークポイントを使用していますし、それがないとLocalDirectorySettingsこの行になったが、それは一部に継続する場合:それはキャッチ部分になってきた
try
{
writer.Write(readBytes, 0, currentPackageSize);
}
catch(Exception eee)
{
string myeee = eee.ToString();
}
は作家がnullであると言います。ブレークポイントを使うと、作者がnullであることがわかります。
なぜLocalDirectorySettingsになったら、ライターはそれの後にヌルですか?