Ścieżka względna do pliku

0

Witam,
wiem, że temat kila razy się pojawiał, próbował dostosować do Waszych wskazówek ale nie działa. Mam taki program (VC#), który otwiera okno, wyświetla pliki w katalogu, zaznacza się pozycje i otwiera. Kłopot polega na tym, że ścieżka do katalogu musi być względna tzn. program ma być w katalogu z innym katalogami zawierającymi pliki do wyświetlania. Czy pomoże mi ktoś

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
namespace WindowsFormsApp7
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();

            var i = 1;
            char[] MyChar = { 'p', 'd', 'f', '.'};

            string[] pliki = Directory.GetFiles("C:/Users/" + Environment.GetEnvironmentVariable("USERNAME") + "//Desktop/ignis/1");
            listView1.FullRowSelect = true;
            foreach (string plik in pliki)
            {
                          
                string[] row = { i.ToString() , Path.GetFileName(plik).TrimEnd(MyChar) };
                var listViewItem = new ListViewItem(row);
                listView1.Items.Add(listViewItem);

                i++;
            }         
        }
        private void listView1_ItemActivate(object sender, EventArgs e)
        {
        }

        private void button1_Click(object sender, EventArgs e){
      
            String text = listView1.SelectedItems[0].SubItems[1].Text;

            Process.Start("C:/Users/" + Environment.GetEnvironmentVariable("USERNAME") + "/Desktop/ignis/1/"+ text+".pdf");
        }
        private void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }
0

Napisz konkretnie z czym masz problem.
Myślę że namespace System.IO.Directory może Ci pomóc.
Do budowania scieżek powineneś raczej używać Path.Combine.
I zamiast czegoś takiego:

char[] MyChar = { 'p', 'd', 'f', '.'};
/**/.TrimEnd(MyChar)

zrób po prostu:

var s = "qwerty.pdf";
var ss = s.Remove(s.LastIndexOf(".pdf"));
0

Głównie chodzi o to, aby program pobierał zawartość folderu nie stosując ścieżki bezwzględnej. Ponieważ raz jeden użytkownik będzie miał program na zdysku c, inny na D:, a jeszcze inny umieści w chmurze. Istotne jest to, że zawartość folderu będzie zawsze taka sama, tj.:

...\1
....\2
Program.exe

Wewnątrz folderów znajdują się pliki pdf, które mają być pobierane do form2 (z oknem pokazującym zawartość konkretnego folderu).

Stosowałem ścieżkę względna w Directory.GetFiles("@..\1")

Jednak nie działa

1

Folder w którym znajduje sie aplikacja to:

Directory.GetCurrentDirectory()

Aby dostać się do jakiegos podfolderu, robisz:

Path.Combine(Directory.GetCurrentDirectory(), "podkatalog");

Aby uzyskac scieżke do katalogi nadrzednego używasz:

Directory.GetParent(sciezka)

Generalnie wszystko co potrzebujesz masz w klasach Directory i Path

1 użytkowników online, w tym zalogowanych: 0, gości: 1