[c#] 프로젝트의 루트 디렉토리에서 텍스트 파일을 읽는 방법은 무엇입니까?

내 프로젝트의 루트 디렉토리에 추가 한 텍스트 파일의 첫 번째 줄을 읽고 싶습니다. 의미, 내 솔루션 탐색기가 내 프로젝트의 내 .cs 파일과 함께 .txt 파일을 표시합니다.

그래서 나는 시도했습니다.

TextReader tr = new StreamReader(@"myfile.txt");
string myText = tr.ReadLine();

그러나 이것은 Bin 폴더를 참조하고 있고 내 파일이 거기에 없기 때문에 작동하지 않습니다. 어떻게 작동시킬 수 있습니까? : /

감사



답변

솔루션 탐색기에서 myfile.txt를 마우스 오른쪽 단추로 클릭하고 “속성”을 선택합니다.

거기에서 Build Actionto content
Copy to Output Directoryto Copy always또는Copy if newer

여기에 이미지 설명 입력


답변

다음을 사용하여 웹 사이트 프로젝트의 루트 디렉토리를 가져올 수 있습니다.

String FilePath;
FilePath = Server.MapPath("/MyWebSite");

또는 다음과 같이 기본 디렉토리를 가져올 수 있습니다.

AppDomain.CurrentDomain.BaseDirectory


답변

프로젝트에 리소스 파일을 추가합니다 (프로젝트-> 속성-> 리소스를 마우스 오른쪽 단추로 클릭). “문자열”이라고 표시된 곳에서 “파일”로 전환 할 수 있습니다. “리소스 추가”를 선택하고 파일을 선택하십시오.

이제 Properties.Resources컬렉션을 통해 파일을 참조 할 수 있습니다 .


답변

private string _filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);

위의 방법을 사용하면 다음과 같은 결과를 얻을 수 있습니다.

"C:\Users\myuser\Documents\Visual Studio 2015\Projects\myProjectNamespace\bin\Debug"

여기에서 System.IO.Directory.GetParent를 사용하여 뒤로 이동할 수 있습니다.

_filePath = Directory.GetParent(_filePath).FullName;

1 번은 \ bin으로, 2 번은 \ myProjectNamespace로 이동하므로 다음과 같습니다.

_filePath = Directory.GetParent(Directory.GetParent(_filePath).FullName).FullName;

이제 “C : \ Users \ myuser \ Documents \ Visual Studio 2015 \ Projects \ myProjectNamespace”와 같은 것이 있으므로 최종 경로를 fileName에 첨부하기 만하면됩니다. 예를 들면 다음과 같습니다.

_filePath += @"\myfile.txt";
TextReader tr = new StreamReader(_filePath);

도움이 되었기를 바랍니다.


답변

포함시킬 수도 있습니다 (빌드 작업을로 설정 Resource). 여기에서 검색하는 방법은 다음과 같습니다.

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);
    }
}

(에서 가져온 일부 코드 이 답변 에 의해 찰스 )


답변

이 경우 절대 경로를 사용해야합니다. 그러나를 설정하면 CopyToOutputDirectory = CopyAlways수행하는대로 작동합니다.


답변

이 코드에서 root디렉토리 프로젝트에 액세스합니다 .

 string _filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);

그때:

StreamReader r = new StreamReader(_filePath + "/cities2.json"))