Chcę przeczytać pierwszą linię pliku tekstowego, który dodałem do katalogu głównego mojego projektu. Oznacza to, że mój eksplorator rozwiązań wyświetla plik .txt obok moich plików .cs w moim projekcie.
Więc próbowałem zrobić:
TextReader tr = new StreamReader(@"myfile.txt");
string myText = tr.ReadLine();
Ale to nie działa, ponieważ odnosi się do folderu Bin, a mojego pliku tam nie ma ... Jak mogę to zrobić? : /
Dzięki
Odpowiedzi:
W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy plik myfile.txt i wybierz „Właściwości”
Stamtąd ustaw
Build Action
tocontent
iCopy to Output Directory
na alboCopy always
lubCopy if newer
źródło
Embedded Resource
i przeczytaj artykuł o tym, jak czytać zasoby emebedded blogs.msdn.com/b/nikola/archive/2008/05/14/…Aby uzyskać katalog główny projektu witryny sieci Web, możesz użyć następujących elementów:
String FilePath; FilePath = Server.MapPath("/MyWebSite");
Lub możesz pobrać katalog podstawowy w następujący sposób:
źródło
Dodaj plik zasobów do projektu (kliknij prawym przyciskiem myszy projekt-> Właściwości-> zasoby). Tam, gdzie jest napisane „ciągi znaków”, możesz przełączyć się na „pliki”. Wybierz „Dodaj zasób” i wybierz plik.
Możesz teraz odwoływać się do pliku w
Properties.Resources
kolekcji.źródło
private string _filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);
Powyższa metoda przyniesie Ci coś takiego:
"C:\Users\myuser\Documents\Visual Studio 2015\Projects\myProjectNamespace\bin\Debug"
Stąd możesz nawigować wstecz za pomocą System.IO.Directory.GetParent:
1 raz przeniesie Cię do \ bin, 2 razy do \ myProjectNamespace, więc wyglądałoby to tak:
Cóż, teraz masz coś takiego jak „C: \ Users \ myuser \ Documents \ Visual Studio 2015 \ Projects \ myProjectNamespace”, więc po prostu dołącz ostateczną ścieżkę do nazwy pliku, na przykład:
_filePath += @"\myfile.txt"; TextReader tr = new StreamReader(_filePath);
Mam nadzieję, że to pomoże.
źródło
Możesz go również osadzić (ustawić akcję kompilacji na
Resource
), oto jak go stamtąd pobrać:private static UnmanagedMemoryStream GetResourceStream(string resName) { var assembly = Assembly.GetExecutingAssembly(); var strResources = assembly.GetName().Name + ".g.resources"; var rStream = assembly.GetManifestResourceStream(strResources); var resourceReader = new ResourceReader(rStream); var items = resourceReader.OfType<DictionaryEntry>(); var stream = items.First(x => (x.Key as string) == resName.ToLower()).Value; return (UnmanagedMemoryStream)stream; } private void Button1_Click(object sender, RoutedEventArgs e) { string resName = "Test.txt"; var file = GetResourceStream(resName); using (var reader = new StreamReader(file)) { var line = reader.ReadLine(); MessageBox.Show(line); } }
(Niektóre kodu pochodzą z tej odpowiedzi przez Charles )
źródło
W tym przypadku musisz użyć ścieżki bezwzględnej. Ale jeśli ustawisz
CopyToOutputDirectory = CopyAlways
, będzie działać tak, jak to robisz.źródło
W tym kodzie masz dostęp do
root
projektu katalogu:string _filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);
następnie:
StreamReader r = new StreamReader(_filePath + "/cities2.json"))
źródło