WinForms – Come richiedere all'utente un file

 C Programming >> Programmazione C >  >> Tags >> File
WinForms – Come richiedere all'utente un file

In un progetto WinForms, puoi richiedere all'utente di selezionare un file utilizzando il controllo OpenFileDialog:

if (openFileDialog.ShowDialog() == DialogResult.OK)
{
	txtFilePath.Text = openFileDialog.FileName;
}
Code language: C# (cs)

Quando chiami ShowDialog(), verrà chiesto all'utente di selezionare un file:

Quando l'utente fa clic su Apri, sarai in grado di ottenere il percorso del file selezionato dalla proprietà OpenFileDialog.FileName.

Per utilizzare il controllo OpenFileDialog, trascinalo dalla casella degli strumenti nel form. Quindi puoi modificare le proprietà tramite l'interfaccia utente o a livello di codice (come mostrerò negli esempi in questo articolo).

Le proprietà più importanti sono InitialDirectory, Filter e Multiselect. InitialDirectory è semplice:quando si apre il prompt, si aprirà nella directory iniziale specificata. In questo articolo, entrerò nei dettagli sulle proprietà Filtro e Selezione multipla, quindi mostrerò un esempio di visualizzazione dei metadati e del contenuto del file selezionato.

Filtra quali file possono essere selezionati

La proprietà Filtro controlla quali file vengono visualizzati nel prompt.

Ecco un esempio che consente all'utente di selezionare solo i file .config e .json:

openFileDialog.Filter = "Configuration files|*.config;*.json";
Code language: C# (cs)

Verranno visualizzati solo i file .config e .json:

Formato della stringa del filtro

Il formato della stringa del filtro è il seguente:|;||. Questo è un formato piuttosto confuso, quindi è più facile mostrare solo esempi.

Esempio:mostra solo un file specifico

Quanto segue consente solo all'utente di selezionare un file con il nome app.json:

openFileDialog.Filter = "app.json";
Code language: C# (cs)

Esempio:mostra tutti i file

Ciò consente all'utente di selezionare qualsiasi file:

openFileDialog.Filter = "All files|*.*";
Code language: C# (cs)

Esempio:mostra un singolo gruppo di file con più estensioni

Ciò consente all'utente di selezionare qualsiasi file con estensione .config o .json:

openFileDialog.Filter = "Configuration files|*.config;*.json";
Code language: C# (cs)

Le due estensioni sono raggruppate e denominate "File di configurazione".

Esempio:mostra due gruppi di file con un'estensione ciascuno

Ciò consente all'utente di selezionare file .xml o .json:

openFileDialog.Filter = "XML|*.xml|JSON|*.json";
Code language: C# (cs)

Il motivo per avere questi due gruppi (XML e JSON) è perché ogni gruppo appare nel menu a discesa:

Ciò è utile se desideri visualizzare nomi più specifici per le estensioni, invece di utilizzare semplicemente un nome di gruppo generico come "File di configurazione".

Seleziona più file

Per consentire all'utente di selezionare più file, impostare Multiselect=true e ottenere tutti i file selezionati dalla proprietà OpenFileDialog.FileNames:

openFileDialog.Multiselect = true;
openFileDialog.Filter = "Log files|*.log";

if (openFileDialog.ShowDialog() == DialogResult.OK)
{
	foreach(var filePath in openFileDialog.FileNames)
	{
		//use file path
	}
}
Code language: C# (cs)

Ciò richiede all'utente di selezionare un file. Poiché Multiselect è true, possono selezionare più file contemporaneamente:

Quando l'utente fa clic su Apri, l'array di stringhe OpenFileDialog.FileNames viene popolato con tutti i percorsi di file selezionati dall'utente.

Visualizza i metadati e i contenuti del file selezionato

Dopo che l'utente ha selezionato un file e tu hai il percorso del file, cosa fai con esso? Molto probabilmente vorrai utilizzare i metadati e il contenuto del file. Ecco un esempio di visualizzazione delle informazioni sul file selezionato:

using System.IO;

private void btnFilePicker_Click(object sender, EventArgs e)
{
	openFileDialog.Filter = "Comma-separated values file|*.csv";
	
	if (openFileDialog.ShowDialog() == DialogResult.OK)
	{
		var filePath = openFileDialog.FileName;

		txtFilePath.Text = filePath;

		var fileInfo = new FileInfo(filePath);
		var sb = new StringBuilder();
		sb.AppendLine($"File name: {fileInfo.Name}");
		sb.AppendLine($"Created At: {fileInfo.CreationTime}");
		sb.AppendLine($"Modified At: {fileInfo.LastWriteTime}");
		sb.AppendLine($"Bytes: {fileInfo.Length}");
		txtFileInfo.Text = sb.ToString();

		txtFileContent.Text = File.ReadAllText(filePath);

	}
}
Code language: C# (cs)

Ecco come appare: