net項目文件夾
ASP.NET上傳文件用FileUpLoad就可以,但是對文件夾的操作卻不能用FileUpLoad來實現。
下面這個示例便是使用ASP.NET來實現上傳文件夾並對文件夾進行壓縮以及解壓。
ASP.NET頁面設計:TextBox和Button按鈕。
TextBox中需要自己受到輸入文件夾的路徑(包含文件夾),通過Button實現選擇文件夾的問題還沒有解決,暫時只能手動輸入。
兩種方法:生成rar和zip。
1.生成rar
using Microsoft.Win32;
using System.Diagnostics;
protected void Button1Click(object sender, EventArgs e)
{
RAR(@"E:95413594531GIS", "tmptest", @"E:95413594531");
}
///
///壓縮文件
///
///需要壓縮的文件夾或者單個文件
///生成壓縮文件的文件名
///生成壓縮文件保存路徑
///
protected bool RAR(string DFilePath, string DRARName,string DRARPath)
{
String therar;
RegistryKey theReg;
Object theObj;
String theInfo;
ProcessStartInfo theStartInfo;
Process theProcess;
try
{
theReg = Registry.ClassesRoot.OpenSubKey(@"ApplicationsWinRAR.exeShellOpenCommand"); //註:未在注冊表的根路徑找到此路徑
theObj = theReg.GetValue("");
therar = theObj.ToString();
theReg.Close();
therar = therar.Substring(1, therar.Length - 7);
theInfo = " a" + " " + DRARName + "" + DFilePath +" -ep1"; //命令 + 壓縮後文件名 + 被壓縮的文件或者路徑
theStartInfo = new ProcessStartInfo();
theStartInfo.FileName = therar;
theStartInfo.Arguments = theInfo;
theStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
theStartInfo.WorkingDirectory = DRARPath ; //RaR文件的存放目錄。
theProcess = new Process();
theProcess.StartInfo = theStartInfo;
theProcess.Start();
theProcess.WaitForExit();
theProcess.Close();
return true;
}
catch (Exception ex)
{
return false;
}
}
///
///解壓縮到指定文件夾
///
///壓縮文件存在的目錄
///壓縮文件名稱
///解壓到文件夾
///
protected bool UnRAR(string RARFilePath,string RARFileName,string UnRARFilePath)
{
//解壓縮
String therar;
RegistryKey theReg;
Object theObj;
String theInfo;
ProcessStartInfo theStartInfo;
Process theProcess;
try
{
theReg = Registry.ClassesRoot.OpenSubKey(@"ApplicationsWinRar.exeShellOpenCommand");
theObj = theReg.GetValue("");
therar = theObj.ToString();
theReg.Close();
therar = therar.Substring(1, therar.Length - 7);
theInfo = @" X " + " " + RARFilePath + RARFileName + " " + UnRARFilePath;
theStartInfo = new ProcessStartInfo();
theStartInfo.FileName = therar;
theStartInfo.Arguments = theInfo;
theStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
theProcess = new Process();
theProcess.StartInfo = theStartInfo;
theProcess.Start();
return true;
}
catch (Exception ex)
{
return false;
}
}
註:這種方法在在電腦注冊表中未找到應有的路徑,未實現,僅供參考。
2.生成zip
通過調用類庫ICSharpCode.SharpZipLib.dll
該類庫可以從網上下載。也可以從本鏈接下載:SharpZipLib_0860_Bin.zip
增加兩個類:Zip.cs和UnZip.cs
(1)Zip.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Collections;
using ICSharpCode.SharpZipLib.Checksums;
using ICSharpCode.SharpZipLib.Zip;
namespace UpLoad
{
/// <summary>
///功能:壓縮文件
/// creator chaodongwang 2009-11-11
/// </summary>
public class Zip
{
/// <summary>
///壓縮單個文件
/// </summary>
/// <param name="FileToZip">被壓縮的文件名稱(包含文件路徑)</param>
/// <param name="ZipedFile">壓縮後的文件名稱(包含文件路徑)</param>
/// <param name="CompressionLevel">壓縮率0(無壓縮)-9(壓縮率最高)</param>
/// <param name="BlockSize">緩存大小</param>
public void ZipFile(string FileToZip, string ZipedFile, int CompressionLevel)
{
//如果文件沒有找到,則報錯
if (!System.IO.File.Exists(FileToZip))
{
throw new System.IO.FileNotFoundException("文件:" + FileToZip + "沒有找到!");
}
if (ZipedFile == string.Empty)
{
ZipedFile = Path.GetFileNameWithoutExtension(FileToZip) + ".zip";
}
if (Path.GetExtension(ZipedFile) != ".zip")
{
ZipedFile = ZipedFile + ".zip";
}
////如果指定位置目錄不存在,創建該目錄
//string zipedDir = ZipedFile.Substring(0,ZipedFile.LastIndexOf("\"));
//if (!Directory.Exists(zipedDir))
//Directory.CreateDirectory(zipedDir);
//被壓縮文件名稱
string filename = FileToZip.Substring(FileToZip.LastIndexOf('\') + 1);
System.IO.FileStream StreamToZip = new System.IO.FileStream(FileToZip, System.IO.FileMode.Open, System.IO.FileAccess.Read);
System.IO.FileStream ZipFile = System.IO.File.Create(ZipedFile);
ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);
ZipEntry ZipEntry = new ZipEntry(filename);
ZipStream.PutNextEntry(ZipEntry);
ZipStream.SetLevel(CompressionLevel);
byte[] buffer = new byte[2048];
System.Int32 size = StreamToZip.Read(buffer, 0, buffer.Length);
ZipStream.Write(buffer, 0, size);
try
{
while (size < StreamToZip.Length)
{
int sizeRead = StreamToZip.Read(buffer, 0, buffer.Length);
ZipStream.Write(buffer, 0, sizeRead);
size += sizeRead;
}
}
catch (System.Exception ex)
{
throw ex;
}
finally
{
ZipStream.Finish();
ZipStream.Close();
StreamToZip.Close();
}
}
/// <summary>
///壓縮文件夾的方法
/// </summary>
public void ZipDir(string DirToZip, string ZipedFile, int CompressionLevel)
{
//壓縮文件為空時默認與壓縮文件夾同一級目錄
if (ZipedFile == string.Empty)
{
ZipedFile = DirToZip.Substring(DirToZip.LastIndexOf("\") + 1);
ZipedFile = DirToZip.Substring(0, DirToZip.LastIndexOf("\")) +"\"+ ZipedFile+".zip";
}
if (Path.GetExtension(ZipedFile) != ".zip")
{
ZipedFile = ZipedFile + ".zip";
}
using (ZipOutputStream zipoutputstream = new ZipOutputStream(File.Create(ZipedFile)))
{
zipoutputstream.SetLevel(CompressionLevel);
Crc32 crc = new Crc32();
Hashtable fileList = getAllFies(DirToZip);
foreach (DictionaryEntry item in fileList)
{
FileStream fs = File.OpenRead(item.Key.ToString());
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
ZipEntry entry = new ZipEntry(item.Key.ToString().Substring(DirToZip.Length + 1));
entry.DateTime = (DateTime)item.Value;
entry.Size = fs.Length;
fs.Close();
crc.Reset();
crc.Update(buffer);
entry.Crc = crc.Value;
zipoutputstream.PutNextEntry(entry);
zipoutputstream.Write(buffer, 0, buffer.Length);
}
}
}
/// <summary>
///獲取所有文件
/// </summary>
/// <returns></returns>
private Hashtable getAllFies(string dir)
{
Hashtable FilesList = new Hashtable();
DirectoryInfo fileDire = new DirectoryInfo(dir);
if (!fileDire.Exists)
{
throw new System.IO.FileNotFoundException("目錄:" + fileDire.FullName + "沒有找到!");
}
this.getAllDirFiles(fileDire, FilesList);
this.getAllDirsFiles(fileDire.GetDirectories(), FilesList);
return FilesList;
}
/// <summary>
///獲取一個文件夾下的所有文件夾里的文件
/// </summary>
/// <param name="dirs"></param>
/// <param name="filesList"></param>
private void getAllDirsFiles(DirectoryInfo[] dirs, Hashtable filesList)
{
foreach (DirectoryInfo dir in dirs)
{
foreach (FileInfo file in dir.GetFiles("*.*"))
{
filesList.Add(file.FullName, file.LastWriteTime);
}
this.getAllDirsFiles(dir.GetDirectories(), filesList);
}
}
/// <summary>
///獲取一個文件夾下的文件
/// </summary>
/// <param name="strDirName">目錄名稱</param>
/// <param name="filesList">文件列表HastTable</param>
private void getAllDirFiles(DirectoryInfo dir, Hashtable filesList)
{
foreach (FileInfo file in dir.GetFiles("*.*"))
{
filesList.Add(file.FullName, file.LastWriteTime);
}
}
}
}
(2)UnZip.cs
using System.Collections.Generic;
using System.Linq;
using System.Web;
/// <summary>
///解壓文件
/// </summary>
using System;
using System.Text;
using System.Collections;
using System.IO;
using System.Diagnostics;
using System.Runtime.Serialization.Formatters.Binary;
using System.Data;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.Zip.Compression;
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
namespace UpLoad
{
/// <summary>
///功能:解壓文件
/// creator chaodongwang 2009-11-11
/// </summary>
public class UnZipClass
{
/// <summary>
///功能:解壓zip格式的文件。
/// </summary>
/// <param name="zipFilePath">壓縮文件路徑</param>
/// <param name="unZipDir">解壓文件存放路徑,為空時默認與壓縮文件同一級目錄下,跟壓縮文件同名的文件夾</param>
/// <param name="err">出錯信息</param>
/// <returns>解壓是否成功</returns>
public void UnZip(string zipFilePath, string unZipDir)
{
if (zipFilePath == string.Empty)
{
throw new Exception("壓縮文件不能為空!");
}
if (!File.Exists(zipFilePath))
{
throw new System.IO.FileNotFoundException("壓縮文件不存在!");
}
//解壓文件夾為空時默認與壓縮文件同一級目錄下,跟壓縮文件同名的文件夾
if (unZipDir == string.Empty)
unZipDir = zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath));
if (!unZipDir.EndsWith("\"))
unZipDir += "\";
if (!Directory.Exists(unZipDir))
Directory.CreateDirectory(unZipDir);
using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))
{
ZipEntry theEntry;
while ((theEntry = s.GetNextEntry()) != null)
{
string directoryName = Path.GetDirectoryName(theEntry.Name);
string fileName = Path.GetFileName(theEntry.Name);
if (directoryName.Length > 0)
{
Directory.CreateDirectory(unZipDir + directoryName);
}
if (!directoryName.EndsWith("\"))
directoryName += "\";
if (fileName != String.Empty)
{
using (FileStream streamWriter = File.Create(unZipDir + theEntry.Name))
{
int size = 2048;
byte[] data = new byte[2048];
while (true)
{
size = s.Read(data, 0, data.Length);
if (size > 0)
{
streamWriter.Write(data, 0, size);
}
else
{
break;
}
}
}
}
}
}
}
}
}
以上這兩個類庫可以直接在程序里新建類庫,然後復制粘貼,直接調用即可。
主程序代碼如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using Microsoft.Win32;
using System.Diagnostics;
namespace UpLoad
{
public partial class UpLoadForm : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
if (TextBox1.Text == "") //如果輸入為空,則彈出提示
{
this.Response.Write("<script>alert('輸入為空,請重新輸入!');window.opener.location.href=window.opener.location.href;</script>");
}
else
{
//壓縮文件夾
string zipPath = TextBox1.Text.Trim(); //獲取將要壓縮的路徑(包括文件夾)
string zipedPath = @"c: emp"; //壓縮文件夾的路徑(包括文件夾)
Zip Zc = new Zip();
Zc.ZipDir(zipPath, zipedPath, 6);
this.Response.Write("<script>alert('壓縮成功!');window.opener.location.href=window.opener.location.href;</script>");
//解壓文件夾
UnZipClass unZip = new UnZipClass();
unZip.UnZip(zipedPath+ ".zip", @"c: emp"); //要解壓文件夾的路徑(包括文件名)和解壓路徑(temp文件夾下的文件就是輸入路徑文件夾下的文件)
this.Response.Write("<script>alert('解壓成功!');window.opener.location.href=window.opener.location.href;</script>");
}
}
}
}
本方法經過測試,均已實現。
另外,附上另外一種上傳文件方法,經測試已實現,參考鏈接:http://blog.ncmem.com/wordpress/2019/11/20/net%e4%b8%8a%e4%bc%a0%e5%a4%a7%e6%96%87%e4%bb%b6%e7%9a%84%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/
B. .net里新建項目
你需要這樣做:
1. 首先在VS2005中新建一個「網站」,選擇「ASP.NET網站」,以「文件系統」的方式保存一個位置,比如:「E:\WebProject」。此時就會在E盤新生成一個網站項目WebProject,這個項目中只有一個默認的網頁「Default.aspx」,你還可以在此項目中添家新的網頁。
2. 在控制面板中打開IIS,創建虛擬目錄,比如虛擬目錄名為「WebTest」,並將虛擬目錄指向剛剛建好的項目位置,即「E:\WebProject」。
3. 打開IE,在URL中輸入「http://localhost/WebTest/Default.aspx」,你便會看到網頁「Default.aspx」的內容了。
C. vs2013下的asp.net項目文件夾問什麼有的是白色
你這些文件夾/文件沒有包含到項目中,點擊右鍵包含到項目中就正常了。
還有些文件夾入bin,obj默認也是這個顏色的,這些就是項目中不常用的文件。
點擊解決方案資源管理器的「顯示全部文件」,就能顯示或者隱藏這些文件。
D. 如何在asp.net項目中添加文件夾
右鍵就可以添加,如圖所示
E. Asp.net 實現刪除項目文件夾下的指定文件
很簡單,有了文件的路徑(包括文件名),就一句話
System .IO .File .Delete (String path),接受一個參數(path),就是路徑,只要路徑對了可以刪除,而且當你的文件夾中沒文件時也不報錯
F. 在VB.NET中,項目保存後,系統自動建立了多個文件夾和文件,當前目錄是什麼作用是什麼
1、首先建立一個簡單的示例工程,如下圖所示。
G. 以下哪些是asp.net支持的文件夾
1. Bin文件夾
Bin文件夾包含應用程序所需的,用於控制項、組件或者需要引用的任何其他代碼的可部署程序集。該目錄中存在的任何.dll文件將自動地鏈接到應用程序。如果在該文件夾中留有不用的或過期的文件,則可能出現「二義性引用(ambiguous reference)」異常的風險。換句話說,如果兩個不同的程序集定義相同的類(相同的命名空間和名稱),則ASP.NET運行庫不能決定應該使用哪一個程序集,從而拋出一個異常。在開發時,當我們重新命名一個項目或一個程序集的名稱時,這是常見的錯誤。為了避免這種錯誤,一定不要在該文件夾中保留任何不必要的程序集,或者至少要從配置文件的<assemblies>節中刪除如下代碼行:
<add assembly="*" />
2. App_Browser文件夾
該可選的文件夾包含.browser文件。.browser文件描述瀏覽器(不管是移動設備瀏覽器,還是台式機瀏覽器)的特 征和功能。ASP.NET在安裝路徑下的Config/Browser文件夾中安裝了大量.browser文件,這些文件供所有應用程序共享。我們只是把 當前應用程序特有的瀏覽器文件放在App_Browser文件夾下。.browser文件的內容即時動態地進行編譯,以便向ASP.NET運行庫提供最新 的瀏覽器信息。
讓我們簡單談談擁有一個自定義的.browser文件可能有幫助的場景。設想應用程序使用了一個在某個瀏覽器下不能有效呈現的控制項。在指定的瀏覽器中顯示宿主頁面時,可以編寫一個.browser文件,迫使ASP.NET使用一個不同的適配器來生成該控制項。
<browsers>
<browser id="browserID">
<controlAdapters>
<adapter controlType="Samples.CustomControl"
adapterType="Samples.Adapters.CustomControlAdapter" />
</controlAdapters>
</browser>
</browsers>
假設browserID與ASP.NET識別的標准瀏覽器之一相匹配,則上文所示的.browser文件指示在指定的瀏覽器下使用CustomControlAdapter呈現CustomControl。
3. App_Code文件夾
App_Code文件夾正好在Web應用程序根目錄下,其存儲所有應當作為應用程序的一部分動態編譯的類文件。這些類文件自 動鏈接到應用程序,而不需要在頁面中添加任何顯式指令或聲明來創建依賴性。App_Code文件夾中放置的類文件可以包含任何可識別的ASP.NET組件 ——自定義控制項、輔助類、build提供程序、業務類、自定義提供程序、HTTP處理程序等。
注意 在開發時,對App_Code文件夾的更改會導致整個應用程序重新編譯。對於大型項目,這可能不受歡迎,而且很耗時。為此,鼓勵大家將代碼進行模塊化處理 到不同的類庫中,按邏輯上相關的類集合進行組織。應用程序專用的輔助類大多應當放置在App_Code文件夾中。
App_Code文件夾中存放的所有類文件應當使用相同的語言。如果類文件使用兩種或多種語言編寫,則必須創建特定語言的子目錄,以包含用每種語言編寫的類。一旦根據語言組織這些類文件,就要在web.config文件中為每個子目錄添加一個設置:
<compilation>
<codeSubDirectories>
<add directoryName="VBFolder" />
</codeSubDirectories>
</compilation>
重要的是,特定語言的子目錄應在web.config文件中注冊,否則,不管它們屬於哪個文件夾,App_Code文件夾下 的所有文件將被編譯成一個單獨的程序集。上述配置腳本描述了這么一種情況,即所有的C#文件都放在App_Code文件夾的根目錄下,而把幾個 Visual Basic .NET類文件移入VBFolder目錄中。如果<codeSubDirectories>節中提到的目錄不存在,則會收到一個編譯錯誤提 示。
App_Code根文件夾中的文件被編譯成App_Code_xxx.dll程序集,其中xxx是隨機生成的字元序列。一個 給定子目錄中的文件將被編譯成一個名為App_SubCode_xxx_yyy.dll的動態創建的程序集,其中xxx指示子目錄的名稱,而yyy是一個 隨機字元序列。只有在應用程序根目錄中的web.config文件中進行了設置,<codeSubDirectories>節才有效。
在App_Code目錄或任何其他子目錄中放置一個assemblyinfo.cs文件,可以創建一個強命名的程序集。顯然,如果該文件夾包含Visual Basic .NET文件,那麼將使用assemblyinfo.vb文件。程序集配置文件可以引用一個.snk文件來保存強名稱的密鑰。
注意 給一個程序集設置一個強名稱,首先必須獲得一個公開/私有密鑰對。通過使用強名稱(Strong Name)工具(sn.exe),可以獲得這樣一個密鑰對。強名稱工具是我們可以在.NET Framework的安裝路徑中發現的SDK binary之一。密鑰對文件通常有一個.snk擴展名。可以將該文件保存到一個應用程序文件夾中,並在assemblyinfo.cs文件中引用它,如下所示:
[assembly: AssemblyKeyFileAttribute(@"yourKeyPair.snk")]
注意,Visual Basic .NET是在包含Visual Studio Solution的目錄中尋找密鑰文件,而C#編譯器則在包含該binary的目錄中尋找密鑰文件。據此可知,用此屬性調整我們使用的路徑,或者把密鑰文件放在合適的文件夾中。
在隨後發生的任何重新生成中,程序集的名稱將發生變化。同時,老的AppDomain請求一結束,就刪除老的程序集。
App_Code文件夾並非只能包含類文件。特別是,它可以包含並能自動地處理代表數據架構的XSD文件。把一個XSD文件 添加到該文件夾中時,編譯器將把它解析成一個有類型的DataSet類,並將它添加到應用程序作用域中。在ASP.NET 1.x中,這一工作由Visual Studio .NET向導,使用一個命令行實用程序(xsd.exe)完成的。
注意 使用web.config文件注冊一個組件(例如,一個自定義的伺服器控制項或一個自定義的HTTP處理程序)時,通常要求指定包含該代碼的程序集名稱。如 果該組件定義在App_Code文件夾中,則應該用什麼名稱來指示程序集?在這種情況下,只是忽略程序集信息,並規定完整的類名即可。如果沒有規定任何程 序集,則ASP.NET運行庫將試圖從任何已裝載的程序集中裝入該類,包括為App_Code文件夾動態創建的程序集。
4. App_Data文件夾
App_Data文件夾應該包含應用程序的本地數據存儲。它通常以文件(諸如Microsoft Access或Microsoft SQL Server Express資料庫、XML文件、文本文件以及應用程序支持的任何其他文件)形式包含數據存儲。該文件夾內容不由ASP.NET處理。該文件夾是ASP.NET提供程序存儲自身數據的默認位置。
注意 默認ASP.NET帳戶被授予對文件夾的完全訪問許可權。如果碰巧要改變ASP.NET帳戶,一定要確保新帳戶被授予對該文件夾的讀/寫訪問權。
5. App_GlobalResources文件夾
正如其他應用程序一樣,ASP.NET應用程序也可以使用資源,而且通常應該使用資源。資源是隔離應用程序用戶界面的可局部 化部分的一種有效方法。一般而言,資源是與程序相關的不可執行的文本。典型的資源有圖像、圖標、文本和附屬文件,但是任何可序列化的對象也可以被看作資 源。應用程序資源存儲在應用程序的外部,這樣就能在不影響和重新編譯應用程序本身的情況下重新編譯和替換它們。
ASP.NET應用程序需要有一個主要程序集來保存應用程序默認的或中性的資源。此外,還要部署許多附屬程序集,它們中各自 包含我們需要支持的某種文化的本地化資源。在ASP.NET 1.x中,編譯一個程序集內的資源有點麻煩。需要手動地將基於XML的資源文件(那些帶.res擴展名的資源)編譯成.resources二進制文件。這 些文件既可以嵌入到一個.NET可執行文件中,也可以編譯成附屬程序集。使用資源文件生成器實用程序resgen.exe,將文本和基於XML的資源文件 轉變為.resource文件。資源文件名稱遵循baseName.cultureName.resource命名約定,其中baseName通常是應用 程序的名稱:
resgen.exe ProAspNet20.resx ProAspNet20.it.resources
創建.resource文件以後,應當把它嵌入到一個程序集中,甚至可以作為一個資源容器來使用。要把一個資源文件嵌入到一個附屬程序集中,可以使用程序集連接器工具(al.exe)。在命令行上,指出程序集所使用的文化(如下面示例中的it,它代表義大利)和名稱。
al /out:ProAspNet20.resources.dll /c:it /embed:ProAspNet20.it.resources
在編譯附屬程序集之後,它們將有相同的名稱。將它們部署到不同的子目錄中,分別按文化命名。
幸運的是,對於ASP.NET 2.0,附屬程序集的時代已經一去不復返了。更准確地說,附屬程序集仍然存在,但是由於App_GlobalResources保留文件夾,對開發人員來說它們已經成為過去的事情。
該文件夾中的任何定位的.resx文件自動地被編譯成附屬程序 集。.resx文件的名稱包含文化信息,以幫助ASP.NET運行庫環境的程序集生成。如下文件,resources.resx, resources.it.resx, resources.fr.resx,生成中性程序集以及適合於義大利(Italian)和法國(French)文化的附屬程序集。如果沒有要求特定文 化,則中性程序集是默認的文化資源。
H. asp.net 改項目文件夾路徑
在iis裡面修改,點擊你想有項目名稱--》屬性--》主目錄--》瀏覽
I. asp.net項目部分文件夾不需要編譯,怎麼做
如果是不需要編輯,則選擇下面的「生成操作」——編譯,更改為「內容」