Мое приложение в winforms C# и моей форме необходимо получить изображение из базы данных и сохранить на локальном компьютере (там, где установлено мое приложение) и просмотрено в элементе управления PictureBox.Не удалось найти часть пути C#
У меня есть следующий код (сохранить изображение локально, так и для просмотра в контроле PictureBox):
//dsProjects is a dataset which is retrieved from database
if (dsProjects.Tables[0].Rows.Count > 0)
{
int idxCurPageJob = (iPageNum * 8);
string path = AppDomain.CurrentDomain.BaseDirectory;
string folder = "TEMP";
string fullpath = string.Empty;
fullpath = Path.Combine(path, folder);
bool exists = System.IO.Directory.Exists(fullpath);
try
{
if (!exists)
Directory.CreateDirectory(folder);
else
{
Directory.Delete(fullpath, true);
Directory.CreateDirectory(folder);
}
}
catch (Exception)
{}
try
{
if (dsProjects.Tables[0].Rows.Count > idxCurPageJob)
{
pnl1.Visible = true;
pnl1.AccessibleName = dsProjects.Tables[0].Rows[idxCurPageJob][1].ToString();
Labelfld1.Text = dsProjects.Tables[0].Rows[idxCurPageJob][0].ToString();
byte[] bgImg = (byte[])dsProjects.Tables[0].Rows[idxCurPageJob][2];
string proCode = dsProjects.Tables[0].Rows[idxCurPageJob][3].ToString();
string strfn = Path.Combine(fullpath, proCode + Convert.ToString(DateTime.Now.ToFileTime()) + idxCurPageJob);
using (FileStream fs = new FileStream(@strfn, FileMode.Create, FileAccess.Write))
{
fs.Write(bgImg, 0, bgImg.Length);
fs.Flush();
fs.Close();
}
picBox1.Image = Image.FromFile(strfn);
picBox1.SizeMode = PictureBoxSizeMode.StretchImage;
picBox1.Refresh();
}
if (dsProjects.Tables[0].Rows.Count > (idxCurPageJob + 1))
{
pnl2.Visible = true;
Labelfld2.Text = dsProjects.Tables[0].Rows[idxCurPageJob + 1][0].ToString();
pnl2.AccessibleName = dsProjects.Tables[0].Rows[idxCurPageJob + 1][1].ToString();
byte[] bgImg = (byte[])dsProjects.Tables[0].Rows[idxCurPageJob + 1][2];
string proCode = dsProjects.Tables[0].Rows[idxCurPageJob + 1][3].ToString();
string strfn = Path.Combine(fullpath, proCode + Convert.ToString(DateTime.Now.ToFileTime()) + (idxCurPageJob + 1));
using (FileStream fs = new FileStream(@strfn, FileMode.Create, FileAccess.Write))
{
fs.Write(bgImg, 0, bgImg.Length);
fs.Flush();
fs.Close();
}
picBox2.Image = Image.FromFile(strfn);
picBox2.SizeMode = PictureBoxSizeMode.StretchImage;
picBox2.Refresh();
}
.....
}
catch (Exception ex)
{
StreamWriter sw;
DateTime dtLogFileCreated = DateTime.Now;
try
{
sw = new StreamWriter("Project Form crash-" + dtLogFileCreated.Day + dtLogFileCreated.Month + dtLogFileCreated.Year + "-" + dtLogFileCreated.Second + dtLogFileCreated.Minute + dtLogFileCreated.Hour + ".txt");
sw.WriteLine("### Server Crash ###");
sw.WriteLine("### Message : ###" + ex.Message + "### StackTrace : ###" + ex.StackTrace + "###Soruce : ###" + ex.Source + "### InnerException : ###" + ex.InnerException + "### Data : ###" + ex.Data + " ### END of LOG ###");
sw.Close();
}
finally
{
Application.Exit();
}
}
}
Afer установка приложения на ПК и при перезагрузке компьютера и пытается открыть приложение, то к этой форме приложение распадается. Но после перезапуска приложения (не ПК) у меня не возникает никаких проблем.
Ниже приведены данные журнала ошибок.
### Server Crash :### ### Message : ###Could not find a part of the path 'C:\Program Files\Autoscan Pte Ltd\STK PTA\TEMP\1100101308609520058907460'. ### StackTrace : ### at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access) at PTA.Forms.frmPIProject.SetCurrentPageProjects()###Soruce : ###mscorlib### InnerException : ###### Data : ###System.Collections.ListDictionaryInternal ### END of LOG ###
Эта ошибка происходит в этой строке кода
using (FileStream fs = new FileStream(@strfn, FileMode.Create, FileAccess.Write))
{
fs.Write(bgImg, 0, bgImg.Length);
fs.Flush();
fs.Close();
}
Действительно ценим вашу помощь на этом
Вы можете отлаживать и сказать, что значение принадлежит '@ strfn'? Скорее всего, файл не может быть открыт, потому что он 1. Не существует (неправильный путь) или 2. У вас нет разрешения на его открытие. – Marcus
В папке есть слово TEMP: оно удаляется чем-то при перезапуске ПК? –
@Marcus Значение в strfn равно «C: \ Program Files \ Autoscan \ STKPTA \ TEMP \ 1100101308617311119720900« Временная папка создается там, где установлено мое приложение. Путь правильный. Когда я перезапускаю свое приложение, я не сталкиваюсь с этой проблемой. Спасибо – David