|
I built your project, but when run, the treeview stays blank.
|
|
|
|
|
Edit: I deleted the upload, forgot I was in the middle of trying an ASCII version. Will repost a link once I get it back to Unicode.
That's strange. I tried running it on a low privilege account and it run fine on Vista/32 bit.
In case anything got messed up while I was trying to post the code(I had some issues) I've uploaded the project (VS2008) to: http://sdrv.ms/18SnASR
This version is a bit different because I've been playing with it bit this evening. You will also find the syntax for the FindFirstFileEx function in the scraps.txt file.
Try un-commenting the code in this block:
If hFile.DangerousGetHandle.ToInt32 = -1 Then
Dim [error] As Int32 = Marshal.GetLastWin32Error()
Stop
Return
Else
and see what error code, if any, you are getting.
modified 6-Jun-13 21:43pm.
|
|
|
|
|
|
That one worked great. Now I need to examine what the heck you did!
|
|
|
|
|
So the problem WAS in my version of the WIN32_FIND_DATA structure.
I copied your declarations over to replace mine and other than having to provide something other than null for the initial values, nothing else was required. After doing that, my program works fine.
But I do not understand why my declarations were wrong.
-------------------------------------------------------------------------------------------------
Edit: vb had a banner over my function declaration that was telling me that I might have to martial the WIN32_FIND_DATA structure. I thought it was only referring to the two strings. But why was martialing required everywhere else?
-------------------------------------------------------------------------------------------------
The last two for the strings were what vb.Net suggested when I originally converted my vb6 program over to net, which apparently, in this case, were not the correct solutions. For the other declarations, FILETIME did not work, and the one that bothers me the worst is that Uint32 did not work. Isn't U4 (Unsigned 4 bytes) the same in principal as Uint32 (Unsigned 4 bytes)?
My old structure:
Private Structure WIN32_FIND_DATA
Dim dwFileAttributes As UInt32
Dim ftCreationTime As FILETIME
Dim ftLastAccessTime As FILETIME
Dim ftLastWriteTime As FILETIME
Dim nFileSizeHigh As UInt32
Dim nFileSizeLow As UInt32
Dim dwReserved0 As UInt32
Dim dwReserved1 As UInt32
<VBFixedString(MAX_PATH), MarshalAs(UnmanagedType.ByValTStr, SizeConst:=MAX_PATH)> Public cFileName As String
<VBFixedString(14), MarshalAs(UnmanagedType.ByValTStr, SizeConst:=14)> Public cAlternate As String
End Structure
Your structure:
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode), BestFitMapping(False)> _
Private Class WIN32_FIND_DATA
<MarshalAs(UnmanagedType.U4)> Public dwFileAttributes As IO.FileAttributes = 8208
<MarshalAs(UnmanagedType.U4)> Private ftCreationTime_dwLowDateTime As UInt32 = 0
<MarshalAs(UnmanagedType.U4)> Private ftCreationTime_dwHighDateTime As UInt32 = 0
<MarshalAs(UnmanagedType.U4)> Private ftLastAccessTime_dwLowDateTime As UInt32 = 0
<MarshalAs(UnmanagedType.U4)> Private ftLastAccessTime_dwHighDateTime As UInt32 = 0
<MarshalAs(UnmanagedType.U4)> Private ftLastWriteTime_dwLowDateTime As UInt32 = 0
<MarshalAs(UnmanagedType.U4)> Private ftLastWriteTime_dwHighDateTime As UInt32 = 0
<MarshalAs(UnmanagedType.U4)> Public nFileSizeHigh As UInt32 = 0
<MarshalAs(UnmanagedType.U4)> Public nFileSizeLow As UInt32 = 0
<MarshalAs(UnmanagedType.U4)> Public dwReserved0 As UInt32 = 0
<MarshalAs(UnmanagedType.U4)> Public dwReserved1 As UInt32 = 0
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=32767)> Public cFileName As String = " "
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=14)> Public cAlternateFileName As String = " "
modified 7-Jun-13 2:52am.
|
|
|
|
|
TnTinMn,
I am curios about your usage of U4. Isn't U4 (Unsigned 4 bytes) the same in principal as Uint32 (Unsigned 4 bytes)?
|
|
|
|
|
Like most people, I have some bad habits.
I will decorate the fields with MarshalAs even if it is not needed. It is usually an indication that my first attempt failed (i.e. I copied the declaration for PInvoke.com and it was incorrect) and then I checked the un-managed declaration for the expected type or that I wrote the declaration myself based on the specification.
You are correct concerning the U4 usage. It is not needed when using a UInt32 for a dword field.
see: Blittable and Non-Blittable Types
|
|
|
|
|
Got you. Thanks for the learning. I will say that data typing can be pretty difficult. All it takes is screwing up a ByRef for a ByVal and not figuring it out until an hour later. So I can thoroughly understand using marshaling just to be on the safe side. I wish they would simplify the syntax, however. Like, maybe, "U4ToUInt32(parameter name)". That way, a quick marshaling could be done without having to worry about a long verbose syntax, let alone trying to remember the path of the namespace.
|
|
|
|
|
Quote: ... let alone trying to remember the path of the namespace. Organize your code and move all interop to a separate file and set the proper Imports statements at the top of the code.
Then to really mess with those who read your code but never the MSDN language specification , set an alias for the Imports.
Imports sri = System.Runtime.InteropServices
Imports lok = System.Runtime.InteropServices.LayoutKind
Imports umt = System.Runtime.InteropServices.UnmanagedType
<sri.StructLayout(lok.Sequential)> _
Public Class Class1
<sri.MarshalAs(umt.U4)> Public Fred As UInt32
End Class
Just be careful with the aliasing, there is glitch in their implementation that lets you alias all the way to the class/type name. That is just plain wrong as discussed here.[^]
|
|
|
|
|
I certainly would not like to have to go looking for the an alias, except when lines start getting too long and too numerous. That means I have to jump all over the place to find it, and then I might lose my train of thought. That's true of my own code, too, especially after having not looked at it in ages.
That one example reminds me of someone deliberately trying to make their code obscure so that people will have a hard time understanding it. Works fine, unless you forgot you did it and you come back later and say, "What the F!".
I don't understand why the IDE doesn't see something crazy-wrong like using string = int32 .
|
|
|
|
|
Hey, has anyone heard of the Delimon.win32.IO library?
I just ran into it at MS and it it is a direct replacement for the System.IO functions, with same function names, to boot. The great part is that it crosses the MAX_PATH barrier by design. It requires NET Framework 4. So that means VS2010, unless there is a way to get VS2008 to see it.
If someone mentioned this earlier, I apologize. But I did not find anything on it when doing a search here.
I have added a reference to it in my project and am about to test it.
UPDATE: Is NOT a direct replacement! Going through the properties/methods, a lot are simply not there, or stuff has been moved around and called by different names. Not sure if it completely covers all the functionality of System.IO.
Also, since it requires framework 4, I don't think WinXP can use it. Which is a bummer since there are still a lot of XP systems out there.
UPDATE 2: It MAY be a direct replacement after all...I might have attempted to type in methods while the dll reference was not properly set up. At any rate, this is a brand new library apparently, and it IS buggy. For instance, Directory.Exists and File.Exists methods do not filter correctly...Each returns "True" regardless of whether the resource is a folder or a file.
modified 13-Jun-13 14:41pm.
|
|
|
|
|
To CodeProject,
This is regarding a project that I'm trying to implement - quick chronological file opener script with retrieving 'FileDate' and 'ObjFilePath' and sorting its data into application calendar menu with qick links to exisiting files.
Plese give some suggestions on file date and time attributes inserting into form style widget
Regards, Nik
|
|
|
|
|
Ive read this a dozen times and I can't figure out what your'e trying to say. Don't bother repeateding what you've already said. Break the problem down into smaller parts and describe each of them.
If you can't communicate what you what to do with us, you'll find it impossible to describe how to do it to a computer which is far more picky.
|
|
|
|
|
Hello, the script should list files within directory and date file attributes than it should deliver data array into calendar links widget for quick acces to files by creation date and so, here is the working script that need modification
<pre lang="Javascript">
<html>
<Head>
<Title>HTA Script</Title>
<Style>
Body {Background-Color: CornSilk}
/* Sortable tables */
table.sortable thead {
background-color:#eee;
color:#666666;
font-weight: bold;
cursor: pointer;
}
</Style>
<HTA:Application
Caption = Yes
Border = Thick
ShowInTaskBar = No
MaximizeButton = Yes
MinimizeButton = Yes>
<Script Language = VBScript>
Dim Wsh,WScript
Set Wsh = CreateObject("WScript.Shell")
Sub WindowsLoads
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace("C:\")
If objFolder Is Nothing Then
Exit Sub
Else
Set objFolderItem = objFolder.Self
objPath = objFolderItem.Path
End If
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFso.GetFolder(objPath)
For each objFile in objFolder.Files
FileDate = FormatDateTime(objFile.DateLastModified,2)
If objFolder.Files.Count > 0 Then
Window.Document.Title = "Information For " & objPath
chbox = objFile.Path
strHtml = strHtml & "<tr><td><a href=" & objFile.Path & " name=chbox target=_blank>" & objFile.Name & "</a></td><td width=30> </td><td>" & FileDate & "</td></tr>"
DataArea.InnerHtml = "<table><tr><td> </td><td> </td><td> </td></tr>" & strHtml & "</table>"
End If
Next
End Sub
</script>
</head>
<Body onLoad = "WindowsLoads">
<p><h3 align = center><font color='Orange'>File List</font></h3>
</p>
<Span Id = "DataArea"></Span></Body><Div Align = "Center">
<P>-File List-</P>
</Body>
</html></pre>
-- modified 4-Jun-13 18:07pm.
|
|
|
|
|
n381 wrote: deliver data array into calendar links widget
What in Hell is a "calendar links widget"?!?! We STILL don't have a clue as to what you're talking about.
|
|
|
|
|
Let's say it is menu created of files date attributes, sorted as calendar (widget) with links to files,
so it can be used for quick access to files selecting creation date link pointers istead of link text.
Nik
|
|
|
|
|
I STILL can't figure out what you're talking about, "sorted as calendar (widget)".
Have a nice life!
|
|
|
|
|
Okay,
here is the snapshot of two applications combined : file list and calendar widget
[url=http://postimage.org/][img=http://s8.postimg.org/rs9zsz3md/vbs_link_calendar_widget.jpg][/url]
[url=http://postimage.org/app.php]windows print screen[/url]
http://s8.postimg.org/rs9zsz3md/vbs_link_calendar_widget.jpg
Regards
|
|
|
|
|
So it searches for files somewhere and places links to them into a calendar-like control(.NET MonthCalendar , perhaps?), so that the date the link is displayed on is the date of the last edit.
At least that was what I understood it as.
|
|
|
|
|
Thank you for replying,
yes it is similar kind of application but simplified and should work with retrieving 'FileDate' and 'ObjFilePath' form file attached and sorting its data into application calendar menu with quick links to exisiting files,
please assist with your suggestions
<pre lang="vb">
<HTA:Application
Caption = Yes
Border = Thick
ShowInTaskBar = No
MaximizeButton = Yes
MinimizeButton = Yes>
<Script Language = VBScript>
Dim Wsh,WScript
Set Wsh = CreateObject("WScript.Shell")
Sub WindowsLoads
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace("C:\")
If objFolder Is Nothing Then
Exit Sub
Else
Set objFolderItem = objFolder.Self
objPath = objFolderItem.Path
End If
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFso.GetFolder(objPath)
For each objFile in objFolder.Files
FileDate = FormatDateTime(objFile.DateLastModified,2)
If objFolder.Files.Count > 0 Then
Window.Document.Title = "Information For " & objPath
chbox = objFile.Path
strHtml = strHtml & "<tr><td><a href=" & objFile.Path & " name=chbox target=_blank>" & objFile.Name & "</a></td><td width=30 class=sorttable_nosort> </td><td>" & FileDate & "</td></tr>"
DataArea.InnerHtml = "<table><tr><td> </td><td width=30> </td><td> </td></tr>" & strHtml & "</table>"
//The output string results to be processed into calendar widget with link to files//
End If
Next
End Sub
</script>
</head>
<Body onLoad = "WindowsLoads">
<p><h3 align = center><font color='Orange'>File List</font></h3>
</p>
<Span Id = "DataArea"></Span></Body><Div Align = "Center">
<P>-File List-</P>
</pre>
|
|
|
|
|
hello guys i have doing some project and since i have new for vb.net 2010. my project is coded in vb.net 2010 and ms access 2007 mdb database. i have DocId, description, date and other fileds in the table.. my querry works for all but. i can't add all characters except integers in the database column DocId. it accepts only integer values. so how can i insert characters in the DocId filed. here is the detail
tables: DocId======Textbox name RefferencNoTxt.Text
Table name = EraDms
database name= data
cmd.CommandText = "INSERT INTO EraDms(DocId,Description,Address,NoOfPages, SendOrReceived, SentDate,ReceivedDate,ForwardedWorkingUnit,Attachements,ForwardedDate,ReceivedBy,DocPath) " & _
" VALUES(" & Me.RefferencNoTxt.Text.ToString & ",'" & Me.DescriptionTextBox.Text & "','" & Me.AddressTextBox.Text & "','" & Me.NoOfPagesTextBox.Text & "','" & Me.SendOrReceievedComboBox.Text & "','" & _
Me.SentDateTextBox.Text & "','" & Me.receivedDate.Text & "','" & Me.ForwardedWorkingUnitTextBox.Text & "','" & Me.AttachementsTextBox.Text & "','" & Me.TextBox6.Text & "','" & Me.ReceivedByTextBox.Text & "','" & Me.DocPathTextBox.Text & "')"
cmd.ExecuteNonQuery()
MessageBox.Show("File Upload Successfull", "ERA-DMS-File Uploader", MessageBoxButtons.OK, MessageBoxIcon.Information)
RefreshData()
cnn.Close()
Else
cmd.CommandText = "UPDATE Eradms " & _
" SET DocId=" & Me.RefferencNoTxt.Text.ToString & _
", Description='" & Me.DescriptionTextBox.Text & "'" & _
", Address='" & Me.AddressTextBox.Text & "'" & _
", NoOfPages='" & Me.NoOfPagesTextBox.Text & "'" & _
", SendOrReceived='" & Me.SendOrReceievedComboBox.Text & "'" & _
", SentDate='" & Me.SentDateTextBox.Text & "'" & _
", ReceivedDate='" & Me.TextBox1.Text & "'" & _
", ForwardedWorkingUnit='" & Me.ForwardedWorkingUnitTextBox.Text & "'" & _
", Attachements='" & Me.AttachementsTextBox.Text & "'" & _
",ForwardedDate ='" & Me.TextBox6.Text & "'" & _
",ReceivedBy ='" & Me.ReceivedByTextBox.Text & "'" & _
",DocPath='" & Me.DocPathTextBox.Text & "'" &
" WHERE DocId=" & Me.RefferencNoTxt.Text.ToString
cmd.ExecuteNonQuery()
RefreshData()
Private Sub RefreshData()
Try
If Not cnn.State = ConnectionState.Open Then
'open connection
cnn.Open()
End If
Dim da As New OleDb.OleDbDataAdapter("SELECT * FROM EraDms", cnn)
Dim dt As New DataTable
'fill data to datatable
da.Fill(dt)
'offer data in data table into datagridview
Catch ex As OleDb.OleDbException
End Try
End Sub
best regards
|
|
|
|
|
Change the definition of DocID from Integer to Text in the database.
|
|
|
|
|
DocId data type is text in my database
|
|
|
|
|
What is the actual definition for DocId in your database schema? Also why are you calling ToString on the Me.RefferencNoTxt.Text object; is it not already text?
Use the best guess
|
|
|
|
|
Beiniam wrote: i can't add all characters except integers in the database column DocId. it accepts only integer values. so how can i insert characters in the DocId filed.
From that it makes me ask the question is the column type numeric? (integer, decimal etc.)
you will need to convert RefferencNoTxt.Text to the correct numeric type that your database needs.
i.e.
dim value as integer = Convert.ToInt32(RefferencNoTxt.Text)
Every day, thousands of innocent plants are killed by vegetarians.
Help end the violence EAT BACON
|
|
|
|
|