2012-10-19 8 views
-1

텍스트 파일을 생성했으며 프로젝트 폴더의 위치에 저장됩니다. 텍스트 파일을 다운로드 할 수 있도록 해당 텍스트 파일이 포함 된 URL로 리디렉션하는 방법.URL에서 .txt 파일을 다운로드하는 방법은 무엇입니까?

CreateCSVFile은 데이터 테이블을 기반으로 파일 경로에 CSV 파일을 만듭니다.

콜링 :

string pth = ("C:\\Work\\PG\\AI Handheld Website\\AI Handheld Website\\Reports\\Files\\report.txt"); 
CreateCSVFile(data, pth); 

그리고 기능 :

public void CreateCSVFile(DataTable dt, string strFilePath) 
{ 

    StreamWriter sw = new StreamWriter(strFilePath, false); 
    int iColCount = dt.Columns.Count; 

    for (int i = 0; i < iColCount; i++) 
    { 
     sw.Write(dt.Columns[i]); 

     if (i < iColCount - 1) 
     { 
      sw.Write(","); 
     } 
    } 

    sw.Write(sw.NewLine); 
    // Now write all the rows. 
    foreach (DataRow dr in dt.Rows) 
    { 
     for (int i = 0; i < iColCount; i++) 
     { 
      if (!Convert.IsDBNull(dr[i])) 
      { 
       sw.Write(dr[i].ToString()); 
      } 

      if (i < iColCount - 1) 
      { 
       sw.Write(","); 
      } 
     } 
     sw.Write(sw.NewLine); 
    } 
    sw.Close(); 
    Response.WriteFile(strFilePath); 
    FileInfo fileInfo = new FileInfo(strFilePath); 

    if (fileInfo.Exists) 
    { 
     //Response.Clear(); 
     //Response.AddHeader("Content-Disposition", "attachment; filename=" + fileInfo.Name); 
     //Response.AddHeader("Content-Length", fileInfo.Length.ToString()); 
     //Response.ContentType = "application/octet-stream"; 
     //Response.Flush(); 
     //Response.TransmitFile(fileInfo.FullName); 

    } 
} 

답변

1

sw.Close(); 이후에만 텍스트 파일의 URL에 Response.Redirect()을 입력하십시오. 실제 하드 드라이브의 경로가 아니라 URL을 가져와야합니다. 코드를 기반으로 다음을 수행 할 수 있습니다.

Uri appRootUri = new Uri(HttpContext.Current.Request.ApplicationPath); 
Uri fileUri = new Uri(Path.GetFullPath(strFilePath)); 

Uri relativeUri = fileUri.MakeRelativeUri(appRootUri); 

Response.Redirect("~/" + relativeUri.ToString()); 

의견에 aquinas에서 제안한대로 실제로는 다른 방향으로 진행해야합니다. 파일을 저장하려는 상대 경로를 알아야합니다.이 경우 대신 다음과 같이 할 수 있습니다.

// If you want to store it at http://yourapplication/files/file.txt 
string relativeFilePath = "/files/file.txt"; 

CreateCSVFile(dt, Server.MapPath(relativeFilePath)); 
Response.Redirect("~" + relativeFilePath); 
+0

개인적으로 나는 이것이 잘못된 접근이라고 생각합니다. 분명히 그는 파일을 넣으려는 URL을 알고 있습니다. 예 : ~/Reports/Files/Report.txt. 그런 다음 가상 경로에서 실제 경로를 가져야합니다. 그 반대도 마찬가지입니다. 예 :'string physicalPath = Server.MapPath ("~/Reports/Files/report.txt"). "두 센트. – aquinas

+0

그래, 나는 동의한다, 나는 그가 제시 한 코드의 틀에 근거하여 대답하고 있었다고 생각한다. 나는 그것을하는 더 나은 방법으로 내 대답을 업데이 트됩니다. –

1

Response.Redirect를 ("~/보고서/파일/REPORT.TXT");

관련 문제