Не удается прочитать данные XML из файла, записанного с помощью метода datatable.writexml () 'C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Не удается прочитать данные XML из файла, записанного с помощью метода datatable.writexml () '

Сообщение Anonymous »

У меня есть таблица данных со следующими столбцами. < /p>

Код: Выделить всё

    dataTable.Columns.Add("ID", typeof(string));
dataTable.Columns.Add("File Name", typeof(string));
dataTable.Columns.Add("Date Taken", typeof(string));
dataTable.Columns.Add("Size", typeof(string));
dataTable.Columns.Add("Unique", typeof(bool));
< /code>
Таблица данных записывается в файл XML следующим образом < /p>
if (dgView.DataSource is DataTable dataTable) // Ensure DataSource is a DataTable
{
if (string.IsNullOrWhiteSpace(dataTable.TableName))
{
dataTable.TableName = "MyDataTable"; // Assign a name to avoid serialization error
}

string dataTime = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss"); // Dynamic timestamp
string defaultFolder = txtSort.Text.Trim(); // Default folder from txtSort
string defaultFileName = $"{dataTime}.xml";

using (SaveFileDialog saveFileDialog = new SaveFileDialog())
{
saveFileDialog.InitialDirectory = Directory.Exists(defaultFolder) ? defaultFolder : Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
saveFileDialog.FileName = defaultFileName;
saveFileDialog.Filter = "XML Files (*.xml)|*.xml|All Files (*.*)|*.*";
saveFileDialog.Title = "Save DataTable as XML";

if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
dataTable.WriteXml(saveFileDialog.FileName);
MessageBox.Show($"Data saved to {saveFileDialog.FileName}", "Data Saved", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show($"Error saving data: {ex.Message}", "Save Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
else
{
MessageBox.Show("No valid data table found in DataGridView.", "No Data", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
< /code>
Файл создается следующим образом: < /p>



1
H:\Image backup\TEST_SOURCE\01\IMG_7718(8).jpg
Jan/17/2016 14:46:06
0.673 MB
true


2
H:\Image backup\TEST_SOURCE\01\IMG_7718(2).jpg
Jan/17/2016 14:46:06
0.673 MB
true


3
H:\Image backup\TEST_SOURCE\01\IMG_7719(3).jpg
Jan/17/2016 14:46:07
1.045 MB
true


7
H:\Image backup\TEST_SOURCE\01\IMG_7719(2).jpg
Jan/17/2016 14:46:07
1.045 MB
true


< /code>
Когда я читаю файл следующим образом, данные не читаются.  (Количество строк равно 0.) < /p>
private void btnRetrieve_Click(object sender, EventArgs e)
{
OpenFileDialog OpenFileDialog = new OpenFileDialog();
if (OpenFileDialog.ShowDialog() == DialogResult.OK)
{
string fileName = OpenFileDialog.FileName;
Task.Run(() =>
{
// Load the data from XML into the DataTable
DataTable dataTable = new DataTable();
dataTable.Columns.Add("ID", typeof(string));
dataTable.Columns.Add("File_x0020_Name", typeof(string)); // Handle space as _x0020_
dataTable.Columns.Add("Date_x0020_Taken", typeof(string)); // Handle space as _x0020_
dataTable.Columns.Add("Size", typeof(string));
dataTable.Columns.Add("Unique", typeof(bool));

// Read the XML into the DataTable
if (File.Exists(fileName))
{
try
{
dataTable.ReadXml(fileName);

// Check if data has been loaded
if (dataTable.Rows.Count == 0)
{
this.Invoke(new Action(() =>
{
MessageBox.Show("The XML file was loaded, but no data was found.", "Data Load Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}));
}
else
{
// Populate the dictionary with data from the DataTable
ConcurrentDictionary g_allFiles = new ConcurrentDictionary();

foreach (DataRow row in dataTable.Rows)
{
mediaFile media = new mediaFile
{
id = row["ID"].ToString(),
fileName = row["File_x0020_Name"].ToString(),
exif_date = row["Date_x0020_Taken"].ToString(),
fileSize = row["Size"].ToString(),
unique = Convert.ToBoolean(row["Unique"])
};

// Extract the file extension (3 letters)
string fileExtension = Path.GetExtension(media.fileName)?.Substring(1, 3).ToLower();

if (!string.IsNullOrEmpty(fileExtension))
{
if (!g_allFiles.ContainsKey(fileExtension))
{
g_allFiles[fileExtension] = new List();
}

g_allFiles[fileExtension].Add(media);
}
}

dataTable.Columns["File_x0020_Name"].ColumnName = "File Name";
dataTable.Columns["Date_x0020_Taken"].ColumnName = "Date Taken";

// Update DataGridView with loaded data
this.Invoke(new Action(() =>
{
dgView.DataSource = dataTable;
}));
}
}
catch (Exception ex)
{
// Handle errors in reading the XML
this.Invoke(new Action(() =>
{
MessageBox.Show($"Error reading the XML file: {ex.Message}", "File Read Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}));
}
}
else
{
// If file not found, show a message on the UI thread
this.Invoke(new Action(() =>
{
MessageBox.Show("The specified file path does not exist.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}));
}
});
}
var k = g_allFiles;
}
Что я здесь делаю?

Подробнее здесь: https://stackoverflow.com/questions/793 ... xml-method
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»