det blir en html fil som heter "Filstruktur exindex.html" (som ser ut som orginalet fast med nytt och felaktigt namn) och en som heter "index.html" (som är editerad och helt rätt) Command returnerar väl även exe-filens namn men det verkar som om du bara vill ha sökvägen till platsen där exe-filen ligger. Använd i sådana fall App.Path i stället för Command(). Command() kommer dessutom att inkludera eventuella commandline parametrar. jag löste de precis.. det var för enkelt.. command() returnerar inget slashtecken i slutet så jag fick lägga till ett själv i strängen.. hittade ett till fel.. om jag högerklickar på andra mappar fungerar det bara om mappnamnet man tryckt på innehåller mellanslag i sig.. tex "filstruktur ex" hittade felet på det med men jag vet inte hur jag ska fixa det.. jag löste det genom att skriva:ett litet problem kvar
jag ser inte vad i min kod som gör så att det blir fel.. fast jag är rätt säker på att det har något att göra med "Command()" har inte använt det förut..
Här kommer hela koden för allt..
Project:
Form1:
Private Sub Form_Load()
' Simple datatypes
Dim strPath As String
strPath = Command()
'strPath = "'C:\Jesper\Filstruktur ex\'"
If Not exportToHTML(strPath) Then
MsgBox "Export Error"
End If
End Sub
allt funkar som det ska om jag använder det andra värdet för strpath fast då funkar det inte att högerklicka i utforskaren på den specifika mappen för att skapa html filen i "C:\Jesper\"
Moduler:
modIniFile:
Option Explicit
Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationname As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String) As Long _
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationname As String, _
ByVal lpKeyName As Any, _
ByVal lpString As Any, _
ByVal lpFileName As String) As Long
Public Function ReadIniFile(strIniFile As String, _
strSection As String, _
strKey As String, _
strDefaultValue As String) As String
Dim x As Long
Dim Temp As String * 255
On Error Resume Next
x = GetPrivateProfileString(strSection, strKey, strDefaultValue, Temp, Len(Temp), strIniFile)
If x = 0 Then
ReadIniFile = ""
Else
ReadIniFile = Trim(Temp)
ReadIniFile = stripSpaces(ReadIniFile)
End If
End Function
Public Function WritestrIniFile(strIniFile As String, _
strSection As String, _
strKey As String, _
strValue As String) As Boolean
On Error GoTo ErrorHandler
WritestrIniFile = True
WritePrivateProfileString strSection, strKey, strValue, strIniFile
Exit Function
ErrorHandler:
WritestrIniFile = False
End Function
Public Function stripSpaces(strInput As String) As String
Dim i As Integer
For i = Len(strInput) To 1 Step -1
If Asc(Mid(strInput, i, 1)) <> 0 Then
Exit For
End If
Next
stripSpaces = Left(strInput, i)
End Function
Module1:
Public Function exportToHTML(strPath As String) As Boolean
exportToHTML = True
Dim oFileSystemObj As New FileSystemObject
Dim oFolder As Folder
Dim oSubFolder As Folder
Dim oFiles As Files
Dim oFile As File
Dim strnew As String
Dim firstfile As Boolean
strPath = Left(strPath, Len(strPath) - 1)
strPath = Right(strPath, Len(strPath) - 1)
CopyHTMLIndexFilePath strPath
WriteAndReadHtml
Set oFolder = oFileSystemObj.GetFolder(strPath)
For Each oSubFolder In oFolder.SubFolders
firstfile = True
For Each oFile In oSubFolder.Files
If firstfile Then
strnew = strnew & "<tr>" & _
"<td valign = " & Chr(34) & "top" & Chr(34) & ">" & _
oSubFolder.Name & _
"</td>" & _
"<td>" & _
"" & oFile.Name & "" & _
"</td>" & _
"</tr>"
firstfile = False
Else
strnew = strnew & "<tr>" & _
"<td>" & _
"" & _
"</td>" & _
"<td>" & _
"" & oFile.Name & "" & _
"</td>" & _
"</tr>"
End If
Next
Next
Edithtml strnew, strPath
End Function
Private Function CopyHTMLIndexFilePath(ByVal strPath As String)
Dim oFileSystemObj As New FileSystemObject
Dim strHTMLIndexFilePath As String
strHTMLIndexFilePath = "C:\Jesper\Kod\index.html"
strPath = strPath & Dir(strHTMLIndexFilePath)
FileCopy strHTMLIndexFilePath, strPath
End Function
Private Function WriteAndReadHtml()
strPath = "C:\Jesper\Filstruktur ex\"
End Function
Private Function Edithtml(strnew As String, strPath As String)
' läsa fil
Dim fd2 As Integer
Dim boolFound As Boolean
Dim StrPre As String
Dim StrPost As String
Dim Strget As String
Dim strHTMLTemplate As String
Dim strIniFile As String
strIniFile = App.Path & "\Settings.ini"
strHTMLTemplate = ReadIniFile(strIniFile, "Settings", "HTMLTemplate", "")
fd2 = FreeFile
Open strHTMLTemplate For Input As fd2
boolFound = False
Do Until EOF(fd2)
Input #fd2, Strget
If Strget = "<!--apa -->" Then
boolFound = True
Else
If boolFound = False Then
StrPre = StrPre & vbCrLf & Strget
Else
StrPost = StrPost & vbCrLf & Strget
End If
End If
Loop
Close #fd2
strnew = strnew
If Right(strPath, 1) = "\" Then strPath = Left(strPath, Len(strPath) - 1)
strPath = Left(strPath, InStrRev(strPath, "\") - 1)
fd2 = FreeFile
Open strPath & "\index.html" For Output As fd2
Print #fd2, StrPre
Print #fd2, strnew
Print #fd2, StrPost
Close #fd2
End Function
Edit:
om nån undrar så har jag gjort en genväg till exe filen i högerklicks menyn skicka till.. därifrån kommer sökvägen till strpath
Edit2:
glömde settings.ini filen
[Settings]
HTMLTemplate = "C:\Jesper\kod\index.html"
Sv: ett litet problem kvar
Sv:ett litet problem kvar
men hur skriver man en if sats eller liknande för att kolla om det finns ett slashtecken eller inte.. är tvungen att göra nåt sånt för i andra program kanske command returnerar ett slashtecken..Sv: ett litet problem kvar
annars om det inte finns ett mellanslag med i mappnamnet så blir tex "WINDOWS" istället "WINDOW"
varför blir det så =SSv:ett litet problem kvar
det är
strPath = Left(strPath, Len(strPath) - 1)
strPath = Right(strPath, Len(strPath) - 1)
som tar bort sista bostaven..
men varför försvinner dubbelfnuttarna när man kör de på en mapp utan mellanslag i sig =SSv: ett litet problem kvar
If Left(strPath, 1) = Chr(34) Then
strPath = Left(strPath, Len(strPath) - 1)
strPath = Right(strPath, Len(strPath) - 1)
End If
finns det något bättre sätt?