Meidi
Meidi

Reputation: 572

replace space for every string in the list

I am trying to renaming every file's empty space with an underscore:

DirectoryInfo dir = new DirectoryInfo(@"Q:\Audio");
var files = (from f in dir.GetFiles() select f.FullName);
files.ToList().ConvertAll( s => s.Replace( " ", "_") );

But it's not working, I tried to use a foreach loop and it complains "Cannot assign to 'element' because it is a 'foreach iteration variable'"

How do I approach this?

Upvotes: 2

Views: 1055

Answers (3)

pylover
pylover

Reputation: 8055

You can use one of code blocks below:

DirectoryInfo dir = new DirectoryInfo(@"C:\");
var files = (from f in dir.GetFiles() select f.FullName.Replace(" ", "_"));

or:

DirectoryInfo dir = new DirectoryInfo(@"C:\");
var files = (from f in dir.GetFiles() select f.FullName);
var fileNames = (from fn in files select fn.Replace(" ", "_"));

or:

DirectoryInfo dir = new DirectoryInfo(@"C:\");
var files = (from f in dir.GetFiles() select f.FullName);
var fileNames = files.Select(s => s.Replace(" ", "_"));

or (Bad Idea):

DirectoryInfo dir = new DirectoryInfo(@"C:\");
var files = (from f in dir.GetFiles() select f.FullName);
var fileNames = files.ToList().ConvertAll(s => s.Replace(" ", "_"));

EDIT 1: but i suggest to use select function, its better to not call .ToList() method for deferred objects like IQueryable.

Upvotes: 2

Steve Danner
Steve Danner

Reputation: 22148

you actually need to reset your variable files. Change you last line to reset the files variable with the output from ConvertAll.

files = files.ToList().ConvertAll( s => s.Replace( " ", "_") );

Upvotes: 0

Justin Helgerson
Justin Helgerson

Reputation: 25521

ConvertAll returns a new List.

var renamedFiles = files.ToList().ConvertAll(s => s.Replace(" ", "_"));

Upvotes: 4

Related Questions