When you edit source files in Visual C++ and save them, the
lines are terminated with the "CR/LF" [carriage return, line feed] character
combination. On UNIX systems, lines are terminated by "LF". So, when you view
files that were edited under Windows on UNIX systems you may see many "^M"
characters terminating the lines. This happens if the editor you are using
doesn't know how to interpret the Windows file. Visual C++ can open files that
have lines that terminate with the UNIX-created LF. If you edit this file and
save it from Visual C++ then it is saved in the Windows format (you will see
CR/LF and not the LF that was present previously).
describes a procedure for saving an edited file created on a Windows platform
in a format that can be used on UNIX systems. NOTE
: The Visual C++ .NET IDE has a feature available to save a file
in UNIX format. In IDE, save the file using Save As...
, from the Save drop-down list, select Save with Encoding...
, and thrn click Yes
. From the Line Encoding drop-down list, select Unix (LF)
, and then click OK
You can use the following steps to create a Win32 console
project that will convert a file containing "CR/LF" for line termination to
- Use the Win32 Console Application AppWizard to create a new
empty project named DOS2UNIX.
- From the File menu, click New, and then click the Files tab.
- Select C/C++ Source File and name the new file
- Paste the following code into DOS2UNIX.cpp:
using namespace std;
int main(int argc, char* argv)
cout << "Please specify : dos2unix filename" << endl;
//Open the file for reading in binarymode.
ifstream fp_read(argv, ios_base::in \
sprintf(temp, "%s.temp", argv);
//Create a temporary file for writing in the binary mode. This
//file will be created in the same directory as the input file.
ofstream fp_write(temp, ios_base::out \
| ios_base::trunc \
while(fp_read.eof() != true)
//Check for CR (carriage return)
if((int)ch == 0x0D)
//Delete the existing input file.
//Rename the temporary file to the input file.
//Delete the temporary file.
- From the Build menu, click Build DOS2UNIX.exe to generate the .exe file.
You may want to test this .exe file to see if it works
properly. To do so, open an existing file in the Visual C++ binary editor by
under the File
menu, selecting DOS2UNIX.ex, setting Open as
, and then clicking Open
. For example, if the file contains "HelloCRLFWorld", the binary
(hexadecimal) data would look like:
48 65 6C 6C 6F 0D 0A 57 6F 72 6C 64
This is equivalent to:
From a command prompt, run the command dos2unix.exe <file name>
. Next, open the file in the Visual C++ binary editor.
You will see that the 0x0D
s are removed. As long as you don't edit the file and save it in
Visual C++ the 0x0D
s will not appear.
You can use this in conjunction with
Visual C++ automation to automate the entire process. A simple Microsoft Visual
Basic Script macro can be written to call this tool, but first this tool must
be added to the Tools
menu as follows:
- From the Tools menu, click Customize, and then click the Tools tab.
- Specify a name, such as DOS2UNIX,
and provide the full path to the Dos2unix.exe file in the Command edit box.
- For argument, specify
- For initial directory, specify
$(WkspDir) (specify your own path).
To verify that the tool works, open a file in the Visual C++
editor, and then from the Tools
menu run the DOS2UNIX
tool. You will see that the file that you opened in the editor
has had all its CR characters removed.
If you want to automate this
process so that every time you save an opened file in the Visual C++ editor,
the DOS2UNIX.exe tool is called to remove the 0x0D
s, then use the following VBScript macro:
'This event is fired every time the document is saved in the VC++ Editor.
'This will call the user tool in the Tools menu.
'Change the number depending upon what you have. By default you only
'have 6 tools under the Tools menu, so the DOS2UNIX tool will be the 7th.
This VBScript code will work only if you have a file open in the
Visual C++ editor. This is the only way to call an .exe file from a VBScript
macro (you cannot pass parameters to a VBScript macro). You can write an add-in
instead, and this would be more flexible. You can call the DOS2UNIX.exe tool
from an add-in without having to add it to the Tools
To use the provided VBScript macro in Visual C++:
- Open an existing file that has a .dsm extension or create
- Paste the code provided previously into the
- In Visual C++ do the following:
- From the Tools menu, click Customize.
- Click the Add-ins and Macros Files tab.
- Click Browse to load the .dsm file that contains the macro. Once the .dsm file
has been selected in the Browse dialog box, your file will appear in the Add-ins and macro file list with a selected checkbox next to it.
- Click Close to continue.
Now, if you open a file in the Visual C++ editor and save the
file from the File
menu, the macro will be called and all 0x0D
s will be removed from the opened file. Because this will affect
any file you save from this point onwards and will apply to any project you
open in the future, make sure that you disable the macro from Tools
menu by using Customize
(clear the checkbox next to the macro).
If you are
using Microsoft Visual SourceSafe as the source code management tool, then see
the following Knowledge Base article:
INFO: End of Line Character Settings for Visual SourceSafe
For more information see "Developer Studio Objects" in the
Also see "Argument Macros":
Article ID: 268901 - Last Review: July 13, 2004 - Revision: 3.2
- Microsoft Visual C++ 5.0 Standard Edition
- Microsoft Visual C++ 6.0 Service Pack 5
- Microsoft Visual C++ .NET 2003 Standard Edition
- Microsoft Visual C++ .NET 2002 Standard Edition
|kbautomation kbdevstudio kbhowto kbide kbscript kbvcobj KB268901|