Solved

Exclude Extensions from file array

Posted on 2009-04-02
12
293 Views
Last Modified: 2013-11-07
I have an .aspx page that links to all the .pdf files in a directory and does not display the extension.
Now they would like to have all the files linked and still not display the file extension.
I'm thinking there would be an easier way to do this using "GetFileNameWithoutExtension" but I'm not exactly sure how to do it.
Thanks for any help
Dim dirInfo as New DirectoryInfo(Server.MapPath("/p1/q/csr rpt"))		
Dim arrFileInfo  As Array
Dim filesInfo   As FileInfo
Dim filesTable   As New DataTable
Dim drFiles    As DataRow
Dim dvFiles   As DataView
Dim ofn,ext As String
Dim charCt as Integer
filesTable.Columns.Add("Name", Type.GetType("System.String"))
filesTable.Columns.Add("LastWriteTime", Type.GetType("System.DateTime"))
' Get File Info
arrFileInfo = dirInfo.GetFiles("*.pdf")
For Each filesInfo In arrFileInfo
  drFiles = filesTable.NewRow()					
  ofn = filesInfo.Name
  ext = Right(ofn, 4)
  charCt = Instr(ofn, ".") -1
  ofn = Mid(ofn, 1, charCt)
  drFiles("Name") = ofn
  drFiles("LastWriteTime") = filesInfo.LastWriteTime					
  filesTable.Rows.Add(drFiles)
Next filesInfo
				
dvFiles = filesTable.DefaultView
dvFiles.Sort = "LastWriteTime DESC"
 
dg1.DataSource = dvFiles
dg1.DataBind()

Open in new window

0
Comment
Question by:lakhi
  • 7
  • 5
12 Comments
 
LVL 85

Accepted Solution

by:
Mike Tomlinson earned 400 total points
ID: 24052133
Change:

    drFiles("Name") = ofn

To:

    drFiles("Name") = System.IO.Path.GetFileNameWithoutExtension(filesInfo.Name)

The whole loop would become:

    For Each filesInfo In arrFileInfo
        drFiles = filesTable.NewRow()                                
        drFiles("Name") = System.IO.Path.GetFileNameWithoutExtension(filesInfo.Name)
        drFiles("LastWriteTime") = filesInfo.LastWriteTime                                    
        filesTable.Rows.Add(drFiles)
    Next filesInfo
0
 

Author Comment

by:lakhi
ID: 24052527
I tried that and when I preview the page, I get this error:
BC30456: 'GetFileNameWithoutExtension' is not a member of 'System.IO.FileInfo'
0
 

Author Comment

by:lakhi
ID: 24052555
Wait a sec - that might have been something I did. BRB
0
DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

 
LVL 85

Expert Comment

by:Mike Tomlinson
ID: 24052564
Look closely at the line..  =)

    drFiles("Name") = System.IO.Path.GetFileNameWithoutExtension(filesInfo.Name)
0
 

Author Comment

by:lakhi
ID: 24052733
I did get it to work.
Now, the issue is to add the extension back in when I set up the "DataNavigateUrlFormatString" in the datagrid where the links are listed.
When they were all pdf files, I could just use {0}.pdf but now I'm not sure. How can I do that?
The issue is a little trickier for me because the links are in a virtual directory on the intranet server. So I do a server.mappath to the virtual directory but then the "DataNavigateUrlFormatString" will be:
"http://myintranet.com/virtualDir/qty/csr/2008/" and I used to just add the "/{0}.pdf " but of course that doesn't work now.
help?
0
 
LVL 85

Expert Comment

by:Mike Tomlinson
ID: 24053132
Add the actual FileInfo instance to your Table:

    filesTable.Columns.Add("FileInfo", Type.GetType("System.IO.FileInfo"))

Then in the loop:

    drFiles("FileInfo") = filesInfo

Now you can get it back out with a cast:

    Dim fi As FileInfo = CType(YourDataRowHere("FileInfo"), FileInfo)
    Dim FullName As String = fi.FullName
    ' ...do something with "FullName"...


0
 

Author Comment

by:lakhi
ID: 24053731
Sorry - I'm still a bit confused. I understand how to get the filename with and without the extension but when I set up the datagrid link, I get lost.
If I have:
    Dim fi As FileInfo = CType(YourDataRowHere("FileInfo"), FileInfo)
    Dim FullName As String = fi.FullName

Then how do I reference it in the datagrid hyperlink column. Here is what I mean:
<asp:HyperLinkColumn DataNavigateUrlField="Name" DataNavigateUrlFormatString="http://myintranet.com/virtualDir/qty/csr/2008/" **** DataTextField="Name" Target="_blank">
**** Can I just put "FullName" at this point or how do I do that?
Sorry to be a pest...
0
 
LVL 85

Expert Comment

by:Mike Tomlinson
ID: 24053888
(you're not being a pest)

*** I'm NOT a web programmer though ***         =(

Couldn't you just add an extra column to your datatable that has the filename with the extension on it?

    filesTable.Columns.Add("FileName", Type.GetType("System.String"))
    ...
    drFiles("FileName") = filesInfo.Name ' This WILL have the extension on it

Then you could use your previous code that worked for just PDFs, but with "FileName" instead of "Name".

Sorry if that makes no sense.  Like I said, I'm not a web programmer.  =\

0
 

Author Comment

by:lakhi
ID: 24053958
I did post my question in the "Programming for ASP.Net"
If you aren't a web programmer, who else do I ask?
0
 
LVL 85

Expert Comment

by:Mike Tomlinson
ID: 24054053
You also posted in the GENERIC .Net Topic areas with a code snippet dealing almost exclusively with non web specific code.  I looked at your question and it seemed like I could answer just the part you needed w/o knowing any web programming...and I did.  I showed how to use System.IO.GetFileNameWithoutExtension().

I'll hit the "Request Attention" button and they can get more attention to your question.

Apologies...
0
 

Author Comment

by:lakhi
ID: 24054070
Oh! That makes sense.
Obviously, I'm new at this.
I think I will post it as a separate question because you were so helpful with my main question.
Thank you very much.
0
 

Author Closing Comment

by:lakhi
ID: 31565889
Very helpful. I really needed a web programmer but I didn't post my question in the right place and the Expert who helped me did a great job! Thanks!
0

Featured Post

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Wouldn’t it be nice if you could test whether an element is contained in an array by using a Contains method just like the one available on List objects? Wouldn’t it be good if you could write code like this? (CODE) In .NET 3.5, this is possible…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
Two types of users will appreciate AOMEI Backupper Pro: 1 - Those with PCIe drives (and haven't found cloning software that works on them). 2 - Those who want a fast clone of their boot drive (no re-boots needed) and it can clone your drive wh…
Although Jacob Bernoulli (1654-1705) has been credited as the creator of "Binomial Distribution Table", Gottfried Leibniz (1646-1716) did his dissertation on the subject in 1666; Leibniz you may recall is the co-inventor of "Calculus" and beat Isaac…

832 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question