(VB.NET) Issues Adding or Extracting .cab Files as Resource Files - vb.net

I am working with VB.NET and cannot seem to add .cab files to my resources properly? Or maybe extraction is my issue?
I can add single files fine such as .bat and .txt. I go through the same process and even see the Cab files in resources with the other files. I set them up as Content and Copy Always like the others. But when I extract all the resource files with my standalone EXE, the Cab files output as just empty file. Any other single resource file extracts fine.
If it is my extraction process, my code is below:
Private Sub CreateFile(ByVal Resource As Object, ByVal FullPath As String)
Dim TheFile As StreamWriter
Try
TheFile = New StreamWriter(FullPath)
TheFile.Write(Resource)
TheFile.Close()
Catch
End Try
End Sub
I was under the impression .cab files were actual files unless they are seen as compressed folders by windows? I originally had a .ZIP with sub folders that I successfully converted to a .CAB so my EXE can deploy it with the folder/directory structure intact. On my coding PC I can manually expand the CAB and the file structure is intact. There are about 4-5 files per sub-folder and 3 sub-folders with a readme.txt at the main folder level.
Maybe .cab is not the best way to go? Any other ways to get a .zip of folders and files into a resource in VB.NET if .CAB is not the way? Or maybe I am missing a module or something else that could help?

The solution was quite easy actually, thanks to John's comment above regarding File.WriteAllBytes
My.Computer.FileSystem.WriteAllBytes(FilePathWithFileName, _
My.Resources.YourResourceName, False)
Which allowed me to create the .CAB files perfectly.
In case anyone is having a similar issue, and needs the code to then expand a CAB, that was easy too:
Dim ExtractCAB As New ProcessStartInfo("Expand", _
"""FilePathWithFileName"" -F:* ""ExtractFilePath""") _
With {.WindowStyle = ProcessWindowStyle.Hidden, .Verb = "runas"}
Process.Start(ExtractCAB)

Related

How to unzip the same zip file multiple times?

I am developing a zip extractor app for which if i unzip multiple times the same zip file it should extract like myfile-1, myfile-2, myfile-3 something like this .
example : there is sampleproject.zip in my desktop when i unzip it should be like sampleproject, sampleproject-1, sampleproject-2.
Any Suggestions.
Thanks in Advance!
Based on your comment I suggest you unzip your file to a temporary directory and then move its contents into the actual directory, handling any name clashes as you do that. In outline:
Use URLForDirectory:inDomain:appropriateForURL:create:error: to create a temporary directory suitable to unzip into. You should pass your the URL of your destinationPath for the appropriateForURL: parameter; this should give you a temporary directory on the same volume as destinationPath making placing the unzipped items into the right place moves rather than copies.
Unzip into the temporary directory returned by (1)
Now use NSFileManager calls to traverse the temporary directory moving each item found to destinationPath, renaming as needed to avoid name clashes.
Remove the temporary directory.
If you have problems implementing this algorithm ask a new question, show your code, explain your problem, and include a link back to this question so the thread can be followed. Someone will then undoubtedly help you with the next step.
HTH

custom file open with custom application only

I am working on vb.net application where I wanted to create and read a file. File will have specific extension for ex. .abcb the way I want my application to work is:
can create a file with .abcd extension
should read .abcd files only(and also application created files only so altered extension shouldn't be working)
.abcd files should show some garbage data when open in any other application(ex. word, notepad any image viewer etc.)
Now my application does 1,2(partly) step, i.e. it creates a file and load data also, it reads .abcd files only(not the altered files)
but created file can be read by other software's also.I tried searching a lot but have not found anything and don't know where to start.
Any help is appreciated!
if you don't want other programs to be able to read the content of your file then your going to have to mask it in some way, which is usually done with encryption.
assuming your not too worried about the key being compromised, the easiest way to accomplish this would be to generate a key with something like System.Security.Cryptography and use that key to encyrpt everything you send to the file and everything you read from it.
as for making your own file extension, you can make the extension of a file whatever you want when you make it:
Dim fs As FileStream = File.Create("/path/to/file/filename" & ".abcd")
the only thing that the extension does is tell the OS what progam to use when opening a file by default, which will probably be notepad since your making your own extension

Writing to a document's enclosing folder

When you open an XCode project it can automatically write to the enclosing folder of the respective .xcodeproj file.
In a sandboxed application you can only write to files that are opened, or write to directories that have been opened with NSOpenPanel.
What I'm trying to achieve is the same functionality as XCode ; my app makes a project file (a document much like an .xcodeproj file) that is saved to a user-selected directory, and within that directory other files are created relating to that project file. However, if the file is re-opened after terminating the app, I end up losing permission to write to the enclosing directory.
I see bookmarks are an option but they do not provide the same functionality. If the project file is moved to a new directory it makes no sense to keep writing to the old directory, and I'd have to ask the user for permission to write to the new directory. I don't find this user-friendly. Is there absolutely no way to resolve this problem?
If the project file is moved to a new directory it makes no sense to keep writing to the old directory, and I'd have to ask the user for permission to write to the new directory. I don't find this user-friendly. Is there absolutely no way to resolve this problem?
Unfortunately for you this is Apple's sandbox model and you need to adapt to it. The process you describe is a good way to handle your situation - when you first create a project file ask the user to select the folder to store it and save a bookmark to that folder, when an existing project file is opened check whether you have a saved bookmark for its parent folder and if not put up a dialog explaining the file has been moved and ask the user for permission to use the new parent folder and keep a bookmark to it.
Users are used to these dialogs from apps, the sandbox has been around a long time. You might find keeping a number of saved bookmarks and optimising your collection will improve your users experience. E.g. remember that a bookmark to a folder grants access to all the files and folders within it, and the files/folders within those folders, etc. This means if a user reorganises by moving projects into sub folders may not require you to ask for a new bookmark, and similarly when a new bookmark is acquired any existing ones you have stored to folders contained by the new bookmark's folder are redundant and can be removed from your collection of stored bookmarks.
Not the answer you really wanted, but hope it helps!

How to make files accessible to all users on Visual Basic app

I am attempting to make an instructional app for the call canter that I work at. Part of the code allows users to display information through the use of several files in our directory with drop down combo boxes.
For instance, a small portion of the code is similar to this (I did not save the app and bring it home so I am going off memory):
If cboGlossaryTerm.SelectedItem("MSN")Then
Process.Start("S:\MSN.pdf")
End If
I put the pdf files in My Resources and the Word files are added under the Solution folder.
I am using filepaths in the code as well.
(I attempted to save the pdf files in the Solutions folder but the pdf was not compatible.
With me adding the files this way, will users who do not have access to the S drive folder be able to display the files? Also, will the files remain accessible in the program if they are deleted from the S drive? If not, how should I be referencing the files in my project? Do I have to reference the pdf files from My Resources? If so, how do I do that in an If-Then statement similar to the one above?
from what you have there it doesn't look like the pdfs in the S:\ would be available to anyone who doesn't have the drive mapped on their local machine.
as for if the files are deleted, if they are being loaded from the S:\ then when they are deleted from there the program will not be able to find them to load them.
if the program is being installed on the local machines you might want to look at just including the pdfs in the installer and accessing them through the program files path.

How to Get a File Path in a Specific Project in a Web Application Solution?

I'm writing a Visual Studio Macro and need to read a XML file in my project and write something. i can't get the correct file path!
in my web application solution i have to projects for business and UI files. and my xml file named fa.xml located on UI project in a separate folder. i want to use this macro for many solutions. but the structure is the same.
How can I get the Path of a file in a specific project in my solution?
OK, I'm just going to check for the file. You should get the general idea:
If my.computer.filesystem.fileexists(application.startuppath + "\blabla\fa.xml") then
...
end if