>
이 코드에 어떤 문제가 있습니까? 텍스트 파일은 bin\Debug 에서 작성되지 않습니다  디렉토리!

string path = Environment.CurrentDirectory + "/" + "Contacts.txt";
if (!File.Exists(path))
{
    File.CreateText(path);
    MessageBox.Show("file created successfully");
}
using (StreamWriter sw = new StreamWriter("path", true))
{
    sw.WriteLine(txtCntname1.Text + "," + txtCntnum1.Text + "," + txtCntnum2.Text + "," + txtCntnum3.Text + ",");
    sw.Close();
}

  • 답변 # 1

    EXE 디렉토리를 계산하는 두 가지 방법이 있습니다 :

    1) 암시 적

    파일 이름 만 사용할 수 있습니다. 이 경우 파일은 EXE 파일과 동일한 폴더에 생성됩니다 :

    File.CreateText("Contacts.txt")
    
    

    2) 명시 적

    EXE의 디렉토리를 얻는 확실한 방법이 필요하다면, AppDomain 를 사용해야합니다 :

    string exe_dir = AppDomain.CurrentDomain.BaseDirectory;
    
    

    그러면 문자열을 수동으로 연결하여 경로를 형성하는 대신 Path.Combine 메서드를 사용하십시오.

    string file_path = Path.Combine(exe_dir, "Contact.txt");
    
    

    코드 ( Assembly.GetExecutingAssembly().Location @TobiasTengler에서 제공하는)는 예를 들어 Excel/Word 추가 기능에서 작동하지 않습니다.

  • 답변 # 2

    path 와는 별도로  따옴표로 묶지 말아야합니다 :

    using (StreamWriter sw = new StreamWriter("path", true))
    
    

    Environment.CurrentDirectory 를 사용하지 마십시오 !작업 디렉토리만 나타내므로 실행 파일을 시작한 디렉토리를 항상 나타내는 것은 아닙니다.

    Assembly.GetExecutingAssembly().Location 를 사용하십시오  다음을 사용하여 실행중인 어셈블리의 전체 경로를 얻은 다음 디렉토리에서 추출하십시오.

    Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
    
    

    또는 pyzwyz를 사용할 수도 있습니다  애플리케이션이있는 디렉토리를 식별합니다.

    물론 절대 경로를 사용하지 않는 것도 가능합니다. 디렉토리를 지정하지 않으면 서 상대 경로를 사용하여 파일을 만들 수 있습니다 :

    AppDomain.CurrentDomain.BaseDirectory
    
    

    수정 :

    경로를 어떻게 구성했는지 확인하고 File.CreateText("Contacts.txt") 도 이용하십시오  경로를 구축하려면 :

    Path.Combine
    
    

    var appBaseDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); var contactsFilePath = Path.Combine(appBaseDir, "Contacts.txt");

  • 이전 c# - REST API URI 오류
  • 다음 c++ - 제출하는 동안 For 루프의 분할 오류