Projede bulunan bir klasördeki dosyaları okuyun


90

Bir C # projem var (Windows Konsol Uygulaması). Proje içinde Veri adlı bir klasör oluşturdum . Data klasörünün içinde iki metin dosyası vardır.

Metin dosyalarını "Data" klasöründen nasıl okuyabilirim. Aşağıda şeyleri denedim.

string[] files = File.ReadAllLines(@"Data\Names.txt")

Bu dosyanın bulunamaması hatasıdır.

Daha önce yayınlanan bazı Stackoverflow yanıtlarını kontrol ettim ve hiçbiri benim için çalışmıyor.

Nasıl devam edebilirim? Teşekkürler!


1
Google "mevcut dizin". Yürütülebilir dosya, kaynak kod klasörünüzden kesinlikle çalıştırılmaz!
Ondrej Tucny

Projeyi oluştururken bu veri klasörünü çıktıya mı kopyalıyorsunuz? Dosyalardaki seçenekleri kontrol edin ve düzeltin.
Ravi Y

ayar Her Zaman Çıktı dizinine Kopyala şeklindedir.
SKJ

Yanıtlar:


128

aşağıdaki kod çalışmalıdır:

string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), @"Data\Names.txt");
string[] files = File.ReadAllLines(path);

Klasörüm ve dosyalarım derleme klasöründe yok: s .. Bu neden?
bohem.be

33
Visual Studio içinde, dosyayı işaretlemek ve sonra set Build Actioniçin Contentve Copy to Output DirectorykarşıCopy always
Florian Moser

3
@FlorianMoser notasyonunu uygulayarak @ "Data \ Name.txt" kullanın
Alexandr Sargsyan

"@" ne anlama geliyor?
gumuruh

@ harfi harfine dizge olarak adlandırılır, bkz. stackoverflow.com/questions/3311988/…
Morbia

34

Veri klasörünüzün nerede olduğuna bağlıdır

.Exe dosyasının olduğu dizini almak için:

AppDomain.CurrentDomain.BaseDirectory

Mevcut dizini almak için:

Environment.CurrentDirectory

Ardından dizin yolunuzu ( @"\Data\Names.txt") birleştirebilirsiniz.


18

'Veri' adlı klasördeki tüm dosyaları almanız gerekiyorsa, aşağıdaki gibi kodlayın

string[] Documents = System.IO.Directory.GetFiles("../../Data/");

Şimdi 'Belgeler', 'Veri' klasörü 'Veri' içindeki iki metin dosyasının tam nesne adı dizisinden oluşur.


@Bunyip: Metin dosyasının içeriğini okumanız mı yoksa sadece klasördeki dosyaları bilmeniz mi gerekiyor?
Uthistran Selvaraj

13

Bir C # projem var (Windows Konsol Uygulaması). Proje içinde Görüntüler adlı bir klasör oluşturdum. MyIcon.ico adında bir ico dosyası var. MyIcon.ico'ya aşağıdaki gibi Images klasöründen eriştim.

this.Icon = new Icon(@"../../Images/MyIcon.ico");

9

Her Zaman Çıktı Dizinine Kopyala ayarlandıktan sonra aşağıdakileri deneyin:

 Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
 String Root = Directory.GetCurrentDirectory();

Kabul edilen cevap bu olmalıdır - dosyanın bir kitaplıkta mı yoksa yürütülebilir projede mi olduğu güçlüdür.
Tullochgorum

1

Xamarin.iOS için, dosya varsa dosyanın içeriğini almak için aşağıdaki kodu kullanabilirsiniz.

var documents = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
var filename = Path.Combine(documents, "xyz.json");
if (File.Exists(filename))
{
var text =System.IO.File.ReadAllText(filename);
}

-1

Bu Kodu, klasör ve alt klasörlerdeki tüm dosyaları da okumak için kullanın.

class Program
{
    static void Main(string[] args)
    {

        getfiles get = new getfiles();
        List<string> files =  get.GetAllFiles(@"D:\Document");

        foreach(string f in files)
        {
            Console.WriteLine(f);
        }


        Console.Read();
    }


}

class getfiles
{
    public List<string> GetAllFiles(string sDirt)
    {
        List<string> files = new List<string>();

        try
        {
            foreach (string file in Directory.GetFiles(sDirt))
            {
                files.Add(file);
            }
            foreach (string fl in Directory.GetDirectories(sDirt))
            {
                files.AddRange(GetAllFiles(fl));
            }
        }
        catch (Exception ex)
        {

            Console.WriteLine(ex.Message);
        }



        return files;
    }
}

-1
string myFile= File.ReadAllLines(Application.StartupPath.ToString() + @"..\..\..\Data\myTxtFile.txt")

3
Lütfen bunun neden işe yaradığını / ne işe yaradığını detaylandıran bir metin ekleyin
Gibolt

1
Bu, yazarların sorusunu yanıtlasa da, bazı açıklayıcı sözcüklerden ve / veya belgelere bağlantılardan yoksundur. Ham kod parçacıkları, etraflarında bazı ifadeler olmadan pek yardımcı olmaz. Ayrıca bulabilirsiniz iyi bir cevap yazmayı çok yararlı. Lütfen cevabınızı düzenleyin - Yorumdan
Nick

-2

Bu, benim için yararlı oldu.

var dir = Directory.GetCurrentDirectory()

yol dolgusu geçerli klasörün ötesinde olursa, bu yolu içerecektir \ bin \ debug Size önerdiğim şey,

string dir = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.FullName

ardından dir değerini yazdırın ve yolun size verdiğini doğrulayın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.