2014-10-28 3 views
-3

Есть ли способ, который я могу взять данные из исходного местоположения, а не копировать файл в папку bin/debug. Я ищу, чтобы отправить файл на мой локальный принтер. Но мое приложение C# позволяет отправлять файлы только при копировании файла в папку bin/debug. Есть ли способ, которым я могу приехать !!!Всегда запрашивать файл, отсутствующий в папке bin/debug

коды:

private string image_print() 
{ 
    OpenFileDialog ofd = new OpenFileDialog(); 
     { 
      InitialDirectory = @"C:\ZTOOLS\FONTS", 
      Filter = "GRF files (*.grf)|*.grf", 
      FilterIndex = 2, 
      RestoreDirectory = true 
     }; 

    if (ofd.ShowDialog() == DialogResult.OK) 
    { 
     string filename_noext = Path.GetFileName(ofd.FileName); 
     string path = Path.GetFullPath(ofd.FileName); 
     img_path.Text = filename_noext; 

     string replacepath = @"bin\\Debug"; 
     string fileName = Path.GetFileName(path); 
     string newpath = Path.Combine(replacepath, fileName); 

     if (!File.Exists(filename_noext)) 
     { 
      // I don't like to copy the file to the debug folder 
      // is there an alternative solution? 
      File.Copy(path, newpath); 

      if (string.IsNullOrEmpty(img_path.Text)) 
      { 
       return ""; 
      } 

      StreamReader test2 = new StreamReader(img_path.Text); 
      string s = test2.ReadToEnd(); 
      return s; 
     } 
    } 
} 

private void button4_Click(object sender, EventArgs e) 
{ 
    string s = image_print() + Print_image(); 

    if (!String.IsNullOrEmpty(s) && 
     !String.IsNullOrEmpty(img_path.Text)) 
    { 
     PrintFactory.sendTextToLPT1(s); 
    } 
} 
+1

Что вы имеете в виду, что не позволяет? Вы получаете исключение во время выполнения? –

+0

@GrantWinney я имею в виду .. для кодов, написанных выше, позволяет мне выполнять эту работу .. но я не хочу копировать 'System.IO.File.Copy (путь, новый путь);' файл в папку отладки .. Я хочу выбрать файл и напрямую отправить его на компьютер, а не копировать в папку отладки. –

+0

Каковы значения img_path и пути? – Adam47

ответ

1

Попробуйте это:

private string image_print() 
{ 
    string returnValue = string.Empty; 

    var ofd = new OpenFileDialog(); 
     { 
      InitialDirectory = @"C:\ZTOOLS\FONTS", 
      Filter = "GRF files (*.grf)|*.grf", 
      FilterIndex = 2, 
      RestoreDirectory = true 
     }; 

    if (ofd.ShowDialog() == DialogResult.OK && 
     !string.IsNullOrWhiteSpace(ofd.FileName) && 
     File.Exists(ofd.FileName)) 
    { 
     img_path.Text = Path.GetFileName(ofd.FileName); 

     using (var test2 = new StreamReader(ofd.FileName)) 
     { 
      returnValue = test2.ReadToEnd(); 
     } 
    } 

    return returnValue; 
} 
+0

Теперь он не работает! принтер не печатает сейчас .. –

1

Похоже, что основная проблема вызвана этими линиями:

filename_noext = System.IO.Path.GetFileName(ofd.FileName); //this actually does include the extension!! It does not include the fully qualified path 
... 
img_path.Text = filename_noext; 
... 
StreamReader test2 = new StreamReader(img_path.Text); 

Вы получаете полный путь к файлу с OpenFileDialog затем установит img_path.Text только имя файла. Затем вы используете это имя файла (нет пути), чтобы открыть файл для чтения.

Когда вы открываете новый StreamReader только с именем файла, он будет выглядеть в текущем каталоге для файла (относительно местоположения EXE, в данном случае bin/debug). Копирование на «bin/debug», вероятно, не будет работать в других средах вне вашего компьютера, так как EXE, вероятно, будет развернут где-то в другом месте.

Вы должны использовать полный путь к выбранному файлу:

if (ofd.ShowDialog() == DialogResult.OK) 
{ 
    path = Path.GetFullPath(ofd.FileName); 
    img_path.Text = path; 
    if (string.IsNullOrEmpty(img_path.Text)) 
     return "";// 
    StreamReader test2 = new StreamReader(img_path.Text); 
    string s = test2.ReadToEnd(); 
    return s; 
} 
+0

Не то, что .. Я дал 'img_path.Text = filename_noext;' по какой-то другой причине .. Мне нужно имя файла и расширение там –

+1

Правильно, но вам также нужен полный путь к файлу. Пример: "c: \ temp \ somefile.jpg" вы работаете со значением типа: "somefile.jpg" – Mark