Когда я хочу написать файл, я получаю эту ошибку:WPF StreamWriter ошибка
System.ArgumentNullException: Значение не может быть пустым. Имя Параметр: путь в System.IO.StreamWriter..ctor (путь String, Boolean Append, кодирования Encoding, Int32 BufferSize, булева checkHost) в System.IO.StreamWriter..ctor (String путь) в Music_Player.Library .SongList_Save (String Filename) в «Мой путь»
Это код файла автор:
private void AddSong(string path)
{
DataContext = new Song();
Song _songAdd = new Song();
FileInfo _song = new FileInfo(path);
_songAdd.SongLengh = MainWindow._MusicPlayer.TransformToTime(MainWindow._MusicPlayer.GetSongMaxLength(path));
_songAdd.SongName = System.IO.Path.GetFileNameWithoutExtension(_song.Name);
_songAdd.SongPath = path;
LB_SongList.Items.Add(_songAdd);
SongList_Save(SelectedPlaylist);
}
private void LB_SongList_Drop(object sender, DragEventArgs e)
{
String[] file = e.Data.GetData(DataFormats.FileDrop, true) as String[];
foreach (var path in file)
{
if (MainWindow._MusicPlayer.GetSongMaxLength(path) != -1)
{
AddSong(path);
}
}
}
public void SongList_Save(String fileName)
{
try
{
if (!String.IsNullOrEmpty(fileName) && File.Exists(fileName))
{
using (StreamWriter comboboxsw = new StreamWriter(fileName))
{
for (int cfgitem = 0; cfgitem < LB_SongList.Items.Count; cfgitem++)
{
comboboxsw.WriteLine(GetPath((ListBoxItem)(LB_SongList.ItemContainerGenerator.ContainerFromIndex(cfgitem))));
}
comboboxsw.Close();
}
}
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
}
И если этого не достаточно, он делает записи в файл, но текст написан в два раза. // Отредактируйте запись дважды, но это может быть вызвано другим кодом, поэтому никогда не будет.
Новое исключение: System.ArgumentNullException: значение не может быть пустым. Имя Параметр: Элемент
в MS.Interal.Media.VisualTreeUtils.AsNonNullVisual (DependencyObject элемент, Визуальный & визуальный, Visual3D & Visual3D)
в System.Windows.Media.VisualTreeHelper.GetChildernCount (DependencyObject ссылки)
в Music_Player.Library.FindVisualChild [Childitem] (DependencyObject OBJ) в "PATH" MY
в Music_Player.Library.GetPath (ListBoxItem фунтов) в "PATH" MY
в Music_Player.Library.SongList_Save (String FileName) в "Мой путь"
Все три метода ниже:
private childItem FindVisualChild<childItem>(DependencyObject obj) where childItem : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is childItem)
return (childItem)child;
else
{
childItem childOfChild = FindVisualChild<childItem>(child);
if (childOfChild != null)
return childOfChild;
}
}
return null;
}
private string GetPath(ListBoxItem lb)
{
ListBoxItem myListBoxItem = (ListBoxItem)(lb);
ContentPresenter myContentPresenter = FindVisualChild<ContentPresenter>(myListBoxItem);
DataTemplate myDataTemplate = myContentPresenter.ContentTemplate;
Label target = (Label)myDataTemplate.FindName("SongPath", myContentPresenter);
return (string)target.Content;
}
public void SongList_Save(String fileName)
{
try
{
if (!String.IsNullOrEmpty(fileName))
{
using (StreamWriter comboboxsw = new StreamWriter(fileName))
{
for (int cfgitem = 0; cfgitem < LB_SongList.Items.Count; cfgitem++)
{
comboboxsw.WriteLine(GetPath((ListBoxItem)(LB_SongList.ItemContainerGenerator.ContainerFromIndex(cfgitem))));
}
comboboxsw.Close();
}
}
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
}
Easy один, отладки приложения, и вы увидите, что 'filename' является нулевым или пустым как исключение уже отмечалось ...;) – DHN
Но я всегда определить FileName при вызове. И он записывает файл с именем, которое ему нужно, и записывает две одинаковые строки. –
Ну, исключение говорит иначе. Проверьте свой код. – DHN